zoukankan      html  css  js  c++  java
  • 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名称的控制器将被限制。

  • 相关阅读:
    QT:浮动的饼状统计图(自绘不规则窗口)
    在QTableView中使用各种自定义委托
    QT:使用“状态模式”绘制界面
    Linux IO控制命令生成
    C++ new和delete实现原理——new和delete最终调用malloc和free
    Qt中如何 编写插件 加载插件 卸载插件
    QT:用QSet储存自定义结构体的问题——QSet和STL的set是有本质区别的,QSet是基于哈希算法的,要求提供自定义==和qHash函数
    两种方法:VS2008下C++窗体程序显示控制台的方法——在QT程序中使用cout和cin
    把自定义控件集成到Qt Designer中
    关闭Windows 2008下面应用程序出错后的提示
  • 原文地址:https://www.cnblogs.com/darrenji/p/3593483.html
Copyright © 2011-2022 走看看