第 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。所有其他控制器将具有默认路由功能。