Asp.net mvc 具有多个可选参数的属性路由

Asp.net mvc 具有多个可选参数的属性路由,asp.net-mvc,attributes,routes,asp.net-mvc-5,asp.net-mvc-routing,Asp.net Mvc,Attributes,Routes,Asp.net Mvc 5,Asp.net Mvc Routing,我有一个名为“视图”的控制器,其下面的操作具有多个可选参数。我想使用属性路由生成如下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:

/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();
}
如果我像下面这样使用,一些url是有效的,但这需要我根据参数的数量编写20多条新路由。我使用的是MVC5

[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();
}

有什么建议吗

您可以在routeConfig.cs文件中添加路由。 在RegisterRoutes方法的RouteCollection集合中。将默认值(已存在)放置在最后一个位置

routes.MapRoute(
        "CustomRouteName",           // Route name
        "view/state/{state}/city/{city}/page/{page}"// URL with parameters
        new { controller = "View", action = "Index", state = "", city = "", page="" }
    );