Asp.Net Core遇到Swagger(四)-Swashbuckle技巧c篇(上)

简介: Asp.Net Core遇到Swagger(四)-Swashbuckle技巧c篇

一、前言

Swashbuckle技巧b篇,与Action相关的配置和操作,此处为c篇内容。

二、实践技巧

2.9 忽略过时控制器和过时Action

1)配置服务

编辑ConfigureServices函数中的AddSwaggerGen函数,

services.AddSwaggerGen(c =>
{
    ...
    #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
    #region 忽略过时特性
    //忽略标记过时的Action
    options.IgnoreObsoleteActions();
    //忽略标记过时的Properties
    options.IgnoreObsoleteProperties();
    #endregion
    ...
};

2)添加案例控制器

新建控制器IgnoreObsoleteController,内容如下:

namespace swaggertestbase.Controllers.v1
{
    /// <summary>
    /// 忽略函数控制器
    /// </summary>
    [Route("api/[controller]")]
    [ApiController]
    public class IgnoreObsoleteController : ControllerBase
    {
        /// <summary>
        /// 获取忽略函数数据
        /// </summary>
        /// <returns>返回结果</returns>
        [Obsolete]
        [HttpGet]
        public string Get()
        {
            return "IgnoreObsolete";
        }
        [HttpGet("{id}")]
        //直接直接使用ApiExplorerSettings设置属性IgnoreApi = true
        //在当前项目中该配置无效
    [ApiExplorerSettings(IgnoreApi = true)]
    public string GetById(int id)
        {
            return "IgnoreObsolete";
        }
    }
}

运行效果如下,在v1组中并不存在对应的控制器以及对应过时的函数。

2.10 按照约定选择Action函数

1)自定义约定实现类

新建类ApiExplorerGetsOnlyConvention,实现IActionModelConvention接口,进行ActionModelConvention的自定义规则实现。

/// <summary>
/// 自定义实现只显示Get请求的Action模型
/// </summary>
public class ApiExplorerGetsOnlyConvention : IActionModelConvention
{
    public void Apply(ActionModel action)
    {
        //依据请求是否为get请求处理是是否参与apijson的数据接口生成
        action.ApiExplorer.IsVisible = action.Attributes.OfType<HttpGetAttribute>().Any();
    }
}

2)添加约定到服务配置

services.AddControllers(configure => {
    //添加自定义apiexplor.groupname控制器模型属性
    //configure.Conventions.Add(new ApiExplorerGroupVersionConvention());
    //自定义实现只显示Get请求的Action模型
    configure.Conventions.Add(new ApiExplorerGetsOnlyConvention());
});

在控制器WeatherForecastController中添加一个Post请求函数,

/// <summary>
/// 获取Post数据
/// </summary>
/// <returns>处理结果</returns>
[HttpPost]
public string Post()
{
    return "处理结果";
}

运行效果:

2.11 自定义操作标签

默认Tag分组是以控制器名称为依据进行划分,也可以通过TagActionsBy函数进行配置。

1)默认分组

2)自定义Tags分组

修改ConfigureServicesAddSwaggerGen对应配置,以下为依据Action的请求方法进行分组的案例,需要注意的是IncludeXmlComments函数,需要使用默认配置,而不是设置IncludeXmlComments第二参数为true

services.AddSwaggerGen(options =>
{
    ...
    #region 添加xml注释文件描述性信息
    //获取当前执行程序集名称+.xml,作为实际xml注释文件名称
    string filename = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
    //拼接路径-路径间隔符由系统决定
    string path = System.IO.Path.Combine(System.AppContext.BaseDirectory, filename);
    //添加xml注释文件到swaggergen中用于生成api json
    //此时需要选择使用该函数的默认配置
    options.IncludeXmlComments(path);
    #endregion
    #region 自定义Tags
    options.TagActionsBy(apidescr => {
        return new string[] {
        apidescr.HttpMethod
        };
    });
    #endregion
    ...
};
services.AddControllers(configure => {
    //添加自定义apiexplor.groupname控制器模型属性
    //configure.Conventions.Add(new ApiExplorerGroupVersionConvention());
    //自定义实现只显示Get请求的Action模型
    //configure.Conventions.Add(new ApiExplorerGetsOnlyConvention());
});

运行效果:

2.12 自定义Action排序操作

默认情况下,Action能够按Swagger规范,在添加到分组之前进行排序操作,也可自定义排序规则,修改ConfigureServicesAddSwaggerGen对应配置,此处以自定义排序规则Controller请求方法进行排序。

#region 自定义Tags
options.TagActionsBy(apidescr => {
    return new string[] {
    apidescr.HttpMethod
    };
});
#endregion
#region  自定义Tags排序
options.OrderActionsBy(apidesc =>
{
    //自定义Tag内的Action排序
    return $"{apidesc.ActionDescriptor.RouteValues["controller"]}_{apidesc.HttpMethod}";
});
#endregion

运行效果:



相关文章
|
8天前
|
开发框架 .NET 开发者
简化 ASP.NET Core 依赖注入(DI)注册-Scrutor
Scrutor 是一个简化 ASP.NET Core 应用程序中依赖注入(DI)注册过程的开源库,支持自动扫描和注册服务。通过简单的配置,开发者可以轻松地从指定程序集中筛选、注册服务,并设置其生命周期,同时支持服务装饰等高级功能。适用于大型项目,提高代码的可维护性和简洁性。仓库地址:&lt;https://github.com/khellang/Scrutor&gt;
30 5
|
26天前
|
开发框架 .NET C#
在 ASP.NET Core 中创建 gRPC 客户端和服务器
本文介绍了如何使用 gRPC 框架搭建一个简单的“Hello World”示例。首先创建了一个名为 GrpcDemo 的解决方案,其中包含一个 gRPC 服务端项目 GrpcServer 和一个客户端项目 GrpcClient。服务端通过定义 `greeter.proto` 文件中的服务和消息类型,实现了一个简单的问候服务 `GreeterService`。客户端则通过 gRPC 客户端库连接到服务端并调用其 `SayHello` 方法,展示了 gRPC 在 C# 中的基本使用方法。
38 5
在 ASP.NET Core 中创建 gRPC 客户端和服务器
|
16天前
|
开发框架 缓存 .NET
GraphQL 与 ASP.NET Core 集成:从入门到精通
本文详细介绍了如何在ASP.NET Core中集成GraphQL,包括安装必要的NuGet包、创建GraphQL Schema、配置GraphQL服务等步骤。同时,文章还探讨了常见问题及其解决方法,如处理复杂查询、错误处理、性能优化和实现认证授权等,旨在帮助开发者构建灵活且高效的API。
24 3
|
2月前
|
开发框架 JavaScript 前端开发
一个适用于 ASP.NET Core 的轻量级插件框架
一个适用于 ASP.NET Core 的轻量级插件框架
|
22天前
|
Java 测试技术 API
详解Swagger:Spring Boot中的API文档生成与测试工具
详解Swagger:Spring Boot中的API文档生成与测试工具
34 4
|
5月前
|
数据可视化 Java API
Spring Boot与Swagger的集成
Spring Boot与Swagger的集成
|
5月前
|
Java API 开发者
在Spring Boot中集成Swagger API文档
在Spring Boot中集成Swagger API文档
|
2月前
|
SQL JSON Java
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和PageHelper进行分页操作,并且集成Swagger2来生成API文档,同时定义了统一的数据返回格式和请求模块。
73 1
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
|
2月前
|
前端开发 Java 程序员
springboot 学习十五:Spring Boot 优雅的集成Swagger2、Knife4j
这篇文章是关于如何在Spring Boot项目中集成Swagger2和Knife4j来生成和美化API接口文档的详细教程。
190 1
|
3月前
|
前端开发 Java Spring
【非降版本解决】高版本Spring boot Swagger 报错解决方案
【非降版本解决】高版本Spring boot Swagger 报错解决方案