首页 > 其他分享 >.net 6 全局路由扩展

.net 6 全局路由扩展

时间:2022-12-22 09:44:09浏览次数:36  
标签:selectorModel AttributeRouteModel centralPrefix var net 全局 路由 前缀

1、先定义一个类,用来实现IApplicationModelConvention  接口

/// <summary>
    /// 全局路由前缀配置
    /// </summary>
    public class RouteConvention : IApplicationModelConvention
    {
        /// <summary>
        /// 定义一个路由前缀变量
        /// </summary>
        private readonly AttributeRouteModel _centralPrefix;
        /// <summary>
        /// 调用时传入指定的路由前缀
        /// </summary>
        /// <param name="routeTemplateProvider"></param>
        public RouteConvention(IRouteTemplateProvider routeTemplateProvider)
        {
            _centralPrefix = new AttributeRouteModel(routeTemplateProvider);
        }
        /// <summary>
        /// 接口的Apply方法
        /// </summary>
        /// <param name="application"></param>
        public void Apply(ApplicationModel application)
        {
            //遍历所有的 Controller
            foreach (var controller in application.Controllers)
            {
                // 1、已经标记了 RouteAttribute 的 Controller
                //这一块需要注意,如果在控制器中已经标注有路由了,则会在路由的前面再添加指定的路由内容。
 
                var matchedSelectors = controller.Selectors.Where(x => x.AttributeRouteModel != null).ToList();
                if (matchedSelectors.Any())
                {
                    foreach (var selectorModel in matchedSelectors)
                    {
                        // 在 当前路由上 再 添加一个 路由前缀
                        selectorModel.AttributeRouteModel = AttributeRouteModel.CombineAttributeRouteModel(_centralPrefix,
                            selectorModel.AttributeRouteModel);
                    }
                }
 
                //2、 没有标记 RouteAttribute 的 Controller
                var unmatchedSelectors = controller.Selectors.Where(x => x.AttributeRouteModel == null).ToList();
                if (unmatchedSelectors.Any())
                {
                    foreach (var selectorModel in unmatchedSelectors)
                    {
                        // 添加一个 路由前缀
                        selectorModel.AttributeRouteModel = _centralPrefix;
                    }
                }
            }
        }
    }

 

标签:selectorModel,AttributeRouteModel,centralPrefix,var,net,全局,路由,前缀
From: https://www.cnblogs.com/yyd-sun/p/16997697.html

相关文章

  • .net core web api 路由约束
    路由约束在传入URL发生匹配时执行,URL路径标记为路由值。路径约束通常检查通过路径模板关联的路径值,并对该值是否为可接受做出对/错决定。某些路由约束使用路由值以外......
  • 将路由器从弱电箱里解放出来
    由于家里各个房间的网线的汇聚口是弱电箱,我们一般就把路由器放到弱电箱中,但是随着路由器性能越来越强大,发热也是越来越强,弱电箱已经不适合放路由器了,并且把路由器放弱电箱......
  • Kubernetes网络模型 -flannel +Calico
    切换网络所有pod需要重建Kubernetes要求所有的网络插件实现必须满足如下要求:一个Pod一个IP所有的Pod可以与任何其他Pod直接通信,无需使用NAT映射所有节点可以与所有......
  • Netty入门
    1.简介异步,基于事件驱动的网络应用框架TCP/IP=>JDK原生=>NIO===>Netty《netty实战》《netty权威指南》2.应用基于网络的高并发或者网络的通信RPC框架远程服务调用,......
  • [react] 路由
    文章目录​​1.相关理解​​​​1.1.SPA的理解​​​​1.2.路由的理解​​​​1.2.1什么是路由?​​​​1.2.2路由分类​​​​2.react-router-dom相关API​​​​2.1......
  • Kubernetes(k8s) kubectl top常用命令
    kubectl在$HOME/.kube目录中查找一个名为config的配置文件。可以通过设置KUBECONFIG环境变量或设置--kubeconfig参数来指定其它kubeconfig文件。本文主要介绍K......
  • TP6在路由文件中同时使用跨域和中间件引起的跨域失败问题的解决过程
    在TP6文档中,写路由文件可以连贯操作middleware和allowcrossdomain,并且里面可以配置参数,我一偷懒,就两个都用了,如下图,之前没有增加Middleware的时候好使,能跨域,但后来要用中间......
  • vue-router3,点击相同的路由,会报错NavigationDuplicated
    vue-router点击相同的路由链接会报错NavigationDuplicated{"_name":"NavigationDuplicated","name":"NavigationDuplicated","message":"Navigatingto......
  • .Net Core 三个常用的生命周期(transient/scope/singleton)
    1、单例(AddSingleton:注入一次,一直有效)区别:服务在第一次请求时被创建,后边再次请求都会沿用这个已创建的服务。2、作用域(AddScoped:在一定的区域内有效)区别:服......
  • .net core 6 console app use autofac
    Program.cs//Seehttps://aka.ms/new-console-templateformoreinformationusingAutofac;usingAutofac.Extensions.DependencyInjection;usingConsoleApp;using......