最初のルートは、の形式のすべてのURLとすでに一致していblog/slug
ます。
ルートを解決するとき、ASP.NET MVCは最初の一致を使用しようとし、そのメソッドを取得するアクションがない場合でも使用します。ASP.NET MVCのルーティングは、まだ次のルートを試行しません。
したがって、ルートでは、URLは最初のURLと一致し、MVCはクラスのメソッドblog/my-first-article
を探します。my-first-action
BlogController
解決策1
次のように、メソッドごとに個別のルートを定義できます。
routes.MapRoute("Blog index",
"blog",
new { controller = "Blog", action = "Index" });
routes.MapRoute("Blog RSS feed",
"blog/rss",
new { controller = "Blog", action = "Rss" });
routes.MapRoute("Posts by tag",
"blog/Tags/{params}",
new { controller = "Blog", action = "Tags" });
routes.MapRoute("BlogPost",
"blog/{slug}",
new { controller = "Blog", action = "post" });
解決策2
制約を使用し{action}
て、最初のルートでの有効な値を定義できます。
routes.MapRoute("Blog",
"blog/{action}/{param}",
new { controller = "Blog", action = "Index", param = UrlParameter.Optional },
new { action = 'index|rss|tags' });
routes.MapRoute("BlogPost",
"blog/{slug}",
new { controller = "Blog", action = "post" });
制約は正規表現の形式です。