从默认路由C#排除控制器MVC
问题描述:
我想阻止路由处理我的一个控制器,称为MyController
。从默认路由C#排除控制器MVC
我想这可能会奏效,但它并不:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{urlId}",
defaults: new { controller = "Home", action = "Index", urlId = UrlParameter.Optional },
constraints: new { controller = @"^(!?MyController)$" }
);
可悲的是它阻止我从导航到我的任何控制器。
我只能得到它不匹配,如果控制器包含MyController
使用(!?MyController.*)
但这不完全匹配它。
我试过的所有正则表达式测试者都建议它应该只匹配,正好是MyController
。
答
发现这个在这里http://stephenwalther.com/archive/2008/08/07/asp-net-mvc-tip-30-create-custom-route-constraints
创建NotEqual阶级在约束
public class NotEqual : IRouteConstraint
{
private string _match = String.Empty;
public NotEqual(string match)
{
_match = match;
}
public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
{
return String.Compare(values[parameterName].ToString(), _match, true) != 0;
}
}
使用然后使用类在RouteConfig
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{urlId}",
defaults: new { controller = "Home", action = "Index", urlId = UrlParameter.Optional },
constraints: new { controller = new NotEqual("MyController") }
);
嗨。它是第一个映射的路线。 – Luke 2014-10-09 18:24:49