替换默认参数绑定而不使用默认路由值

时间:2013-09-18 12:39:38

标签: asp.net-mvc

我在控制器中有一个动作,如:

public ActionResult Index(string ssn)
{
}

和默认路线值:{controller}/{action}/{id}

我不想使用像/Home/Index?ssn=1234这样的网址。我希望像/Home/Index/1234一样使用。 但我也不想为ssn参数(或自定义模型绑定器)添加新的路由值。

是否有一些完整的属性,例如[ActionName]但是参数?

这样的事情:

public ActionResult Index([ParameterBinding("id")] string ssn)
{
}

1 个答案:

答案 0 :(得分:0)

Darin& Rumi提到 - 没有内置属性,但是您可以使用单个路径上的RouteCollection.MapRoute约束参数在单个新路由中实现相同的影响(跨多个控制器/操作)。

以下路由配置将“SSN”路由应用于Foo或Bar控制器,任何其他控制器将通过默认路由。

routes.MapRoute(
    name: "SSN",
    url: "{controller}/{action}/{ssn}",
    defaults: new { controller = "Foo", action = "Index" },
    constraints: new { controller = "(Foo|Bar)", action = "Index" }
);
// default route
routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

编辑:或者您可以使用似乎支持您最初请求的ActionParameterAlias库。