动态 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();
}
您唯一的选择是包罗万象的参数。但是,有两个注意事项:
- 包罗万象的参数必须是路由的最后一部分
- 包罗万象的参数将包含所有内容,包括
/
,因此您必须使用正则表达式或其他方式手动解析所需的各个位。
基本上,您只需将路线更改为:
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();
}
所以我正在处理 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();
}
您唯一的选择是包罗万象的参数。但是,有两个注意事项:
- 包罗万象的参数必须是路由的最后一部分
- 包罗万象的参数将包含所有内容,包括
/
,因此您必须使用正则表达式或其他方式手动解析所需的各个位。
基本上,您只需将路线更改为:
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();
}