首页 > 其他分享 >全局路由前缀配置

全局路由前缀配置

时间:2023-07-22 21:45:40浏览次数:32  
标签:selectorModel 前缀 RouteConventio var 全局 路由 AttributeRouteModel

1、新建RouteConventio.cs文件

    /// <summary>
    /// 全局路由前缀配置
    /// </summary>
    public class RouteConventio:IApplicationModelConvention
    {
        /// <summary>
        /// 定义一个路由前缀变量
        /// </summary>
        private readonly AttributeRouteModel _centralPrefix;

        /// <summary>
        /// 调用时传入指定的路由前缀
        /// </summary>
        /// <param name="routeTemplateProvide"></param>
        public RouteConventio(IRouteTemplateProvider routeTemplateProvide)
        {
            _centralPrefix = new AttributeRouteModel(routeTemplateProvide);
        }

        /// <summary>
        /// 接口的Apply方法,在这个方法中根据情况来添加api 路由前缀
        /// </summary>
        /// <param name="application"></param>
        public void Apply(ApplicationModel application)
        {
            //遍历所有的Controller
            foreach (var controllers in application.Controllers)
            {
                //1、已经标记RouteAttribute 的 Controller
                //如果在控制器中已经标注有路由了,则会在路由的前面再添加指定的路由内容
                var matchedSelectors = controllers.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 = controllers.Selectors.Where(x => x.AttributeRouteModel == null).ToList();
                if (unmatchedSelectors.Any())
                {
                    foreach (var selectorModel in unmatchedSelectors)
                    {
                        // 添加一个 路由前缀
                        selectorModel.AttributeRouteModel = _centralPrefix;
                    }
                }
            }
        }
    }
  2、在Program.cs修改内容
builder.Services
//全局路由前缀配置
.AddControllers(option =>
{
    //api/就是在所有路由前面增加的名称
    option.Conventions.Insert(0, new RouteConventio(new RouteAttribute("api/")));
})

////在这里解决中文乱码问题
.AddJsonOptions(options =>
{
    options.JsonSerializerOptions.Encoder = JavaScriptEncoder.Create(UnicodeRanges.All);
});

  

  

 

标签:selectorModel,前缀,RouteConventio,var,全局,路由,AttributeRouteModel
From: https://www.cnblogs.com/ahao214/p/17574322.html

相关文章

  • 2-3 编写函数 htoi(s),把由十六进制数字组成的字符串(包含可选的前缀 0x 或 0X)转换为与
    ArchlinuxGCC13.1.1 202304292023-07-2219:48:23星期六 点击查看代码#include<stdio.h>#include<ctype.h>inthtoi(constchar*s);intmain(){chararr[4]="0x3A";intresult=htoi(arr);printf("%d\n",resu......
  • python设计一个跨模块全局变量
    python中有时候需要用到全局变量,并且这个全局变量需要跨文件,跨模块共享.为此,我设计了一个全局对象,它有以下特点:如果为不存在的属性赋值,则会自动生成这个属性,后续就可以正常引用这个属性,就像对象本身具有此属性一样整个对象可以序列化,后续可以从文件中恢复对......
  • 如何在 SQL Server 2016 中为可用性组配置只读路由
    SQLServerAlwaysOn可用性组概念在SQLServer2012中首次引入,作为企业级高可用性和灾难恢复解决方案,将取代数据库镜像功能。AlwaysOnAvailabilityGroup在组级别提供高可用性解决方案,其中每个组可以包含任意数量的数据库,这些数据库可以复制到多个辅助服务器(称为副本)。SQL......
  • Python全局变量和局部变量
    目录1.python的全局变量和局部变量第一种:global定义全局变量在自定义函数内部第二种:全局定义全局变量,并给其赋值2.python类中public,protected,private定义方式3.python中类的实例化1.python的全局变量和局部变量全局变量定义:在函数外部定义的变量。所有函数内部都可以使用......
  • nesp华为设备模拟器-->静态路由两个网段互联
    静态路由配置,需求如下,PC2需要访问Server1服务器。 软件安装:我下载的是hwmnqensp.rar这个安装包,他是一个整体,不像官网下载那么多包。分析:这里client终端和server服务器,自行配置ip、掩码和网关,LSW二次交换机无需配置;AR1和AR4为路由器,所以需要配置。基础命令:进入用户视图<......
  • jsp 超链接带系统前缀
    如: <a href="www.iteye.com">iteye</a> 网页生成后点击此超链接,始终有如http://localhost:8080的前缀,变成http://localhost:8080/www.iteye.com  解决:加上http://前缀   <a href="http://www.iteye.com">iteye</a> ......
  • strust2中是如何初始化container并且使其全局单例
    strust2中是如何初始化container并且使其全局单例? StrutsPrepareAndExecuteFilterprotectedPrepareOperationsprepare;protectedExecuteOperationsexecute;Dispatcherdispatcher=init.initDispatcher(config);init()Containercontainer=init......
  • 路由
    路由传参1通过请求地址传参数,props开启传参 路由传参2通过props传参,如果为空则使用页面上定义的默认值 路由传参3函数模式   ......
  • 【补充】路由冲突问题
    【补充】路由冲突问题在某些情况下,我们可能需要用到正则表达式去匹配我们的路由但是由于这种方法第一个参数是正则表达式所以当路由特别多的时候,可能会出现被顶替的情况解决方式修改正则表达式调整路由位置推荐根据功能的不同划分出不同的接口api采用路由......
  • 【补充】Django中路由分发的本质
    【补充】Django中路由分发的本质【一】路由分发机制在Django中,admin路由分发的本质是将管理员后台管理功能与应用程序正常的URL分发机制进行了分离。admin路由分发可以让开发者方便地创建、配置和管理应用程序的后台管理界面。【二】关键部分admin.site.register(mod......