手順1:
ルート制約を作成します。
public class RootRouteConstraint<T> : IRouteConstraint
{
public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
{
var rootMethodNames = typeof(T).GetMethods().Select(x => x.Name.ToLower());
return rootMethodNames.Contains(values["action"].ToString().ToLower());
}
}
手順2:
作成したルート制約を使用するデフォルトのマッピングの上に新しいルートマッピングを追加します。ジェネリックパラメーターは、「ルート」コントローラーとして使用する予定のコントローラークラスである必要があります。
routes.MapRoute(
"Root",
"{action}",
new {controller = "Home", action = "Index", id = UrlParameter.Optional},
new {isMethodInHomeController = new RootRouteConstraint<HomeController>()});
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new
{controller = "Home", action = "Index", id = UrlParameter.Optional}
);
これで、example.com / about、example.com/contactのようなホームコントローラーのメソッドにアクセスできるようになります。
これはHomeControllerにのみ影響します。他のすべてのコントローラーには、デフォルトのルーティング機能があります。