具有多个可选参数的属性路由

时间:2014-08-25 03:56:39

标签: asp.net-mvc attributes routes asp.net-mvc-5 asp.net-mvc-routing

我有一个名为“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();
}

有什么建议吗?

1 个答案:

答案 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="" }
    );
相关问题