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名称的控制器将被限制。

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。