ASP.NET MVC ルーティングで奇妙な動作を見つけました。
RouteConfig ファイルで、次のようなルート (デフォルト ルート) をマップすると、次のようになります。
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new {
controller = "Home",
action = "Index",
id = UrlParameter.Optional
}
);
使用:
@Html.ActionLink("Index", "Home")
次のような、きれいで短い URL を取得します。http://mysite/
しかし、次id
のように、の後に別のオプションのパラメーターを追加すると:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}/{name}",
defaults: new {
controller = "Home",
action = "Index",
id = UrlParameter.Optional,
name = UrlParameter.Optional
}
);
同じActionLink
出力この URL:http://mysite/home/index
毎回。を使用して同じ動作を確認しましたRedirectToAction
。
私の質問は次のとおりです。これを回避して、後者の場合に短い URL を取得する方法はありますか? これらの場合、ASP.NET MVC ルーティング エンジンの動作が異なるのはなぜですか?
編集
Dave A が投稿した指示に従って、この問題を回避することができました。カスタム URL パターンに一致する「デフォルト」ルートの前にカスタム ルートを追加しました。
routes.MapRoute(
name: "Custom",
url: "{controller}/{action}/{id}/{name}",
defaults: new {
controller = "Home",
action = "Index",
id = UrlParameter.Optional
}
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new {
controller = "Home",
action = "Index",
id = UrlParameter.Optional
}
);