替换控制器

1. 现有控制器

复制代码
   [Route("/api/account/test/a")]
    public class TestAController : PublicHealthBasicController
    {
        /// <summary>
        /// TestA
        /// </summary>
        /// <returns></returns>
        [HttpGet]
        public virtual string Get()
        {
            return "TestA";
        }
    }
复制代码

因为控制器 TestAController  是框架本身的代码所有无法修改源代码 
这时候我们只需要在编写一个类来继承这个控制重写他的方法即可 但是重写的方法路由是不能重复的 所以我需要重新定义一个新的路由 代码如下

复制代码
    [Route("/api/account/test/b")]
    public class TestBController : TestAController
    {
        /// <summary>
        /// TestB
        /// </summary>
        /// <returns></returns>
        [HttpGet]
        public override string Get()
        {
            return "TestB";
        }
    }
复制代码

 这时候因为线上代码正在运行的原因 所以调用的路由还是 /api/account/test/a 但是我们需要执行的逻辑也是 /api/account/test/b 这时候我们只需要添加一个中间件来处理一下即可

复制代码
app.Use(async (context, next) =>
                {
                    var url = context.Request.Path.Value;
                    if (url == "/api/account/test/a")
                    {
                        context.Request.Path = "/api/account/test/b";
                    }
                    await next();
                });
复制代码

但是这时候我们的 Swagger 文档会看到2个接口的文档  /api/account/test/a /api/account/test/b 

此时我们只希望只显示  /api/account/test/a 的文档 那我们就需要 屏蔽  /api/account/test/b的文档

  options.DocInclusionPredicate((_, description) => description.RelativePath switch
                    {
                        _ when description.RelativePath.StartsWith("/api/account/test/b") => false,
                        _ => true
                    });

 

posted @   刘小吉  阅读(21)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术
历史上的今天:
2016-02-17 服务器不能设置内容类型HTTP头信息后发送
点击右上角即可分享
微信分享提示