我有一个名为“view”的控制器,其下面的操作有多个可选参数。我想使用属性路由生成如下的URL:
/view/keyword/sometext/country/canada
/view/country/canada
/view/keyword/sometext/country/canada/city/calgary
/view/keyword/sometext/country/canada/state/alberta
/view/country/canada/state/alberta/page/1
如您所见,可能存在各种URL组合,因为所有这些参数都是可选的。
但是,如果我使用如下所示,如果请求的URL不匹配或者其中一个可选参数为null,则会出现错误。
[Route("view/keyword/{keyword}/country/{country}/state/{state}/city/{city}/page/{page}")]
public ActionResult Index(int? page, string keyword = "", string city = "", string state = "", string country = "")
{
return view();
}
如果我使用如下所示,某些网址可以正常工作,但这需要我根据参数的数量编写20多条新路由。我正在使用MVC 5.
[Route("view/keyword/{keyword}/country/{country}/state/{state}/city/{city}/page/{page}")]
[Route("view/keyword/{keyword}/country/{country}/state/{state}/page/{page}")]
[Route("view/keyword/{keyword}/country/{country}/city/{city}/page/{page}")]
[Route("view/keyword/{keyword}/state/{state}/city/{city}/page/{page}")]
[Route("view/state/{state}/city/{city}/page/{page}")]
public ActionResult Index(int? page, string keyword = "", string city = "", string state = "", string country = "")
{
return view();
}
有什么建议吗?
答案 0 :(得分:1)
可以在RoutesConfig.cs文件中添加路由。 在RegisterRoutes方法的RoutesCollection集合中。将默认值(已经存在)放在最后一个位置。
routes.MapRoute(
"CustomRouteName", // Route name
"view/state/{state}/city/{city}/page/{page}"// URL with parameters
new { controller = "View", action = "Index", state = "", city = "", page="" }
);