ASP.NET MVC自定义路由 - 实现IRouteConstraint限制控制器名
自定义约束前
namespace MvcApplication2 { public class RouteConfig { public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); //默认 routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } ); } } }
效果
自定义约束后
实现IRouteConstraint接口
using System; using System.Web.Routing; namespace MvcApplication2.Extension { public class ExcludeController : IRouteConstraint { private readonly string _controller; public ExcludeController(string controller) { _controller = controller; } public bool Match(System.Web.HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values,
RouteDirection routeDirection) { //如果路由中拿到的controller值与约束设定的值相等,就返回false return !string.Equals(values["controller"].ToString(), _controller, StringComparison.OrdinalIgnoreCase); } } }
路由添加约束
using System.Web.Mvc; using System.Web.Routing; using MvcApplication2.Extension; namespace MvcApplication2 { public class RouteConfig { public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); //默认 routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }, constraints: new { controller = new ExcludeController("RentalProperties") } ); } } }
效果
可见,加上自定义约束后,带RentalProperties名称的控制器将被限制。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。