MVC自定义路由02-实现IRouteConstraint限制控制器名
通过实现IRouteConstraint接口,实现对某个控制名进行限制。本篇把重点放在自定义约束,其余部分参考:
自定义约束前
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名称的控制器将被限制。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。