Asp.Net Core遇到Swagger(三)-Swashbuckle技巧b篇(下)

简介: Asp.Net Core遇到Swagger(三)-Swashbuckle技巧b篇(下)

2.7 按照约定生成Api分组

1)自定义约定

将控制器特定约定进行分组,以下为命名空间尾缀进行Api分组处理,

/// <summary>
/// 自定义ApiExplorGroup添加到控制器模型中
/// </summary>
public class ApiExplorerGroupVersionConvention : IControllerModelConvention
{
    public void Apply(ControllerModel controller)
    {
        string namespac = controller.ControllerType.Namespace;
        string groupname = namespac.Split(".").Last().ToLower();
        controller.ApiExplorer.GroupName = groupname;
    }
}

2)添加约束

Startup.cs中的服务注册函数中修改AddControllers函数配置,

public void ConfigureServices(IServiceCollection services)
{
    ..........
    //添加自定义apiexplor.groupname控制器模型属性
    services.AddControllers(configure => {
        configure.Conventions.Add(new ApiExplorerGroupVersionConvention());
    });
}

3)修改命名空间

修改控制器WeatherForecastControllerValuesController的命名空间分别为v1v2

//WeatherForecastController.cs
namespace swaggertestbase.Controllers.v1
{
    /// <summary>
    /// 天气预报服务
    /// </summary>
    [ApiController]
    [Route("[controller]")]
    public class WeatherForecastController : ControllerBase
    {
        .......
    }
}
//ValuesController.cs
namespace swaggertestbase.Controllers.v2
{
    [ApiController]
    [Route("api/[controller]")]
    [ApiExplorerSettings(GroupName ="v2")]
    public class ValuesController : ControllerBase
    {
    .......
    }
}

运行效果中,会发现,切换到ggcy v2时,将不再包含天气预报相关控制器和api

2.8 自定义Action分组规则判定条件

1)引用依赖

Nuget引用Microsoft.AspNetCore.Mvc.Versioning 5.0.0

2)添加判定规则

修改服务注册中DocInclusionPredicateApiDescription.GroupName判定逻辑,实现依据version特性进行Api分组

public void ConfigureServices(IServiceCollection services)
{
    services.AddSwaggerGen(
        options =>
        {
            ...........
            #region 自定义DocInclusionPredicate判定规则
            options.DocInclusionPredicate((docName, apiDesc) => {
                //判定当前执行是否为函数对象
                if (!apiDesc.TryGetMethodInfo(out MethodInfo methodInfo)) 
                    return false;
                //获取函数对应的自定义特性ApiVersionAttribute对应的版本集合
                var versions = methodInfo.GetCustomAttributes(true)
                .OfType<ApiVersionAttribute>()
                .SelectMany(x => x.Versions);
                //判定版本集合中是否与当前文档匹配
                return versions.Any(x => $"v{x}" == docName);
            });
            #endregion
        }
        );
      .........
}

3)添加案例控制器

创建Api控制器DocInclusionController,设定Version特性

namespace swaggertestbase.Controllers
{
    /// <summary>
    /// DocInclusion控制器
    /// </summary>
    [Route("api/[controller]")]
    [ApiController]
    public class DocInclusionController : ControllerBase
    {
        /// <summary>
        /// 获取DocInclusion数据
        /// </summary>
        /// <returns>查询结果</returns>
        /// <remarks>
        /// GET: 
        ///     api/DocInclusionController
        /// </remarks>
        [HttpGet]
        [ApiVersion("1")]
        public IEnumerable<string> Get()
        {
            return new string[] { "value1", "value2" };
        }
    }
}

运行效果:

相关文章
|
4月前
|
开发框架 .NET C#
ASP.NET Core Blazor 路由配置和导航
大家好,我是码农刚子。本文系统介绍Blazor单页应用的路由机制,涵盖基础配置、路由参数、编程式导航及高级功能。通过@page指令定义路由,支持参数约束、可选参数与通配符捕获,结合NavigationManager实现页面跳转与参数传递,并演示用户管理、产品展示等典型场景,全面掌握Blazor路由从入门到实战的完整方案。
457 6
|
开发框架 .NET 开发者
简化 ASP.NET Core 依赖注入(DI)注册-Scrutor
Scrutor 是一个简化 ASP.NET Core 应用程序中依赖注入(DI)注册过程的开源库,支持自动扫描和注册服务。通过简单的配置,开发者可以轻松地从指定程序集中筛选、注册服务,并设置其生命周期,同时支持服务装饰等高级功能。适用于大型项目,提高代码的可维护性和简洁性。仓库地址:&lt;https://github.com/khellang/Scrutor&gt;
398 5
|
开发框架 算法 中间件
ASP.NET Core 中的速率限制中间件
在ASP.NET Core中,速率限制中间件用于控制客户端请求速率,防止服务器过载并提高安全性。通过`AddRateLimiter`注册服务,并配置不同策略如固定窗口、滑动窗口、令牌桶和并发限制。这些策略可在全局、控制器或动作级别应用,支持自定义响应处理。使用中间件`UseRateLimiter`启用限流功能,并可通过属性禁用特定控制器或动作的限流。这有助于有效保护API免受滥用和过载。 欢迎关注我的公众号:Net分享 (239字符)
341 1
|
开发框架 缓存 .NET
GraphQL 与 ASP.NET Core 集成:从入门到精通
本文详细介绍了如何在ASP.NET Core中集成GraphQL,包括安装必要的NuGet包、创建GraphQL Schema、配置GraphQL服务等步骤。同时,文章还探讨了常见问题及其解决方法,如处理复杂查询、错误处理、性能优化和实现认证授权等,旨在帮助开发者构建灵活且高效的API。
407 3
|
前端开发 .NET API
ASP.NET MVC 5使用Swagger生成API文档
一、安装 新建一个没有身份验证的mvc项目 - SwaggerMvc5Demo,然后添加一个名为Remote(自定义)且包含基础读写(不想手写)的ApiController   开源地址:https://github.
7772 0
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
510 0
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
310 7
|
存储 开发框架 前端开发
[回馈]ASP.NET Core MVC开发实战之商城系统(五)
经过一段时间的准备,新的一期【ASP.NET Core MVC开发实战之商城系统】已经开始,在之前的文章中,讲解了商城系统的整体功能设计,页面布局设计,环境搭建,系统配置,及首页【商品类型,banner条,友情链接,降价促销,新品爆款】,商品列表页面,商品详情等功能的开发,今天继续讲解购物车功能开发,仅供学习分享使用,如有不足之处,还请指正。
402 0
|
开发框架 前端开发 .NET
[回馈]ASP.NET Core MVC开发实战之商城系统(一)
[回馈]ASP.NET Core MVC开发实战之商城系统(一)
519 0
|
SQL 开发框架 前端开发
[回馈]ASP.NET Core MVC开发实战之商城系统(开篇)
[回馈]ASP.NET Core MVC开发实战之商城系统(开篇)
490 0