標籤:
自訂約束前
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名稱的控制器將被限制。
ASP.NET MVC自訂路由 - 實現IRouteConstraint限制控制器名(轉載)