动态 url 的路由配置

Route Config for dynamic urls

所以我正在处理 MVC 4 应用程序。我的问题是对于某个控制器,Url 可以是 http://domain/category/clothing/1256 也可以是 http://domain/category/clothing/shirts/formal/128'。如您所见,url 的深度发生了变化,但所有内容都必须路由到类别控制器。

由于 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+" }
);

上面的代码将不起作用,因为它只占一层。关于如何实现这一点的任何想法

类目控制器的Index方法

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

您唯一的选择是包罗万象的参数。但是,有两个注意事项:

  1. 包罗万象的参数必须是路由的最后一部分
  2. 包罗万象的参数将包含所有内容,包括 /,因此您必须使用正则表达式或其他方式手动解析所需的各个位。

基本上,您只需将路线更改为:

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

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

public ActionResult Index(string path)
{
    // parse path to get the data you need:

    return view();
}