Asp.net MVC路由:静态之前的默认值 - 为什么它不起作用?

时间:2017-01-07 01:22:12

标签: asp.net-mvc routing asp.net-mvc-routing

例如,我希望能够通过/login/en/login路由获取我的登录页面。

 routes.MapRoute(
            name: "LoginLang",
            url: "{lang}/Login",
            defaults: new { lang = "en", controller = "Account", action = "Login" }
            );

但如果/en/login被接受,则路由/login不会被接受。可以通过其他途径进行处理,但是,您是否有解释为什么/login被拒绝?

1 个答案:

答案 0 :(得分:2)

因为您的路由模式表明lang(参数)字符串应该在字符串" Login"之前。在网址中。

如果您想同时支持en/loginlogin,则应再创建一个路由条目并在路由表中注册。

routes.MapRoute(
   name: "DefaultLoginLang",
   url: "Login",
   defaults: new { lang = "en", controller = "Account", action = "Login" }
);

routes.MapRoute(
   name: "LoginLang",
   url: "{lang}/Login",
   defaults: new { lang = "en", controller = "Account", action = "Login" }
);
// Your default route registration goes here

或者您可以使用属性路由

[Route("Login")]
[Route("{lang}/Login")]
public ActionResult Login(string lang="en")
{
   //to do : return something
}