路由配置动态URL

时间:2017-09-18 10:57:34

标签: asp.net asp.net-mvc asp.net-mvc-4 routeconfig

所以我正在研究MVC 4应用程序。我的问题是针对某个控制器,网址可以是http://domain/category/clothing/1256,也可以是http://domain/category/clothing/shirts/formal/128'。正如您所看到的,网址的深度会发生变化,但所有网址都必须路由到类别控制器。

由于url的最大部分未知,我无法使用User Routeconfig,因为我不知道参数何时会出现。

routes.MapRoute(
    name: "Category",
    url: "Category/{ignore}/{id}/{SubCatId}/{SubSubCatId}",
    defaults: new { controller = "Category", action = "Index", CatId = UrlParameter.Optional, SubCatId = UrlParameter.Optional, SubSubCatId = UrlParameter.Optional },
    namespaces: new[] { "CSPL.B2C.Web.Controllers" },
    constraints: new { id = @"\d+" }
);

上述代码无效,因为它只占一个级别。关于如何实现这个的任何想法

类别控制器的索引方法

public ActionResult Index(string id, string SubCatId, string SubSubCatId)
{
    return view();
}

1 个答案:

答案 0 :(得分:0)

你唯一的选择是一个全能的参数。但是,有两点需要注意:

  1. 全能参数必须是路线的最后一部分
  2. 这个包罗万象的param会吞下一切,包括data,所以你必须用正则表达式或其他东西手动解析你需要的各个位。
  3. 基本上,您只需将路线更改为:

    /

    然后,您需要更改您的操作以接受此​​新参数:

    routes.MapRoute(
        name: "Category",
        url: "Category/{*path}",
        defaults: new { controller = "Category", action = "Index" },
        namespaces: new[] { "CSPL.B2C.Web.Controllers" }
    );