从默认路由C#MVC中排除控制器
本文关键字:排除 控制器 C#MVC 默认 路由 | 更新日期: 2023-09-27 18:26:08
我想阻止路由处理我的一个控制器,名为MyController
。
我以为这可能有效,但没有:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{urlId}",
defaults: new { controller = "Home", action = "Index", urlId = UrlParameter.Optional },
constraints: new { controller = @"^(!?MyController)$" }
);
遗憾的是,它阻止了我导航到任何控制器。
如果控制器使用(!?MyController.*)
包含MyController
,我只能让它不匹配,但这并不完全匹配。
我尝试过的所有regex测试人员都建议它应该只与完全匹配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") }
);