2017-01-07 14 views
0

たとえば、/login/en/loginのようにログインページを取得したいと考えています。Asp.net MVCルーティング:静的前のデフォルト値 - なぜ機能しないのですか?

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

しかし/en/loginが受け入れてしまった場合、ルート/loginではありません。それは追加のルートで治療可能ですが、まだ/loginが拒絶される理由を説明していますか?

答えて

2

あなたのルートパターンには、URLの文字列 "Login"の前にlang(パラメータ)文字列が含まれていると記載されているためです。

en/loginloginの両方をサポートする場合は、ルートエントリをもう1つ作成してルートテーブルに登録する必要があります。

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 
} 
のルーティング属性を使用することができます
関連する問題