MVC自定义路由02-实现IRouteConstraint限制控制器名


通过实现IRouteConstraint接口,实现对某个控制名进行限制。本篇把重点放在自定义约束,其余部分参考:

MVC自定义路由01-为什么需要自定义路由 

  自定义约束前

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 }
            );
        }
    }
}
 

效果

约束前

 

  自定义约束后

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值