• ABP中关于Swagger的一些配置


    Abp 集成 Swagger 官方文档, 请参考 Swagger Integration

    AspNetCore 配置 Swagger, 请参考 Swashbuckle.AspNetCore

    本文的项目环境是 AspNetCore 6.0 + Volo.Abp.Swashbuckle 6.0.2

    Abp 中默认的基础配置如下:

    public override void ConfigureServices(ServiceConfigurationContext context)
    {
        var services = context.Services;
        services.AddAbpSwaggerGen(
            options =>
            {
                options.SwaggerDoc("v1", new OpenApiInfo { Title = "Test API", Version = "v1" });
                options.DocInclusionPredicate((docName, description) => true);
                options.CustomSchemaIds(type => type.FullName);
            }
        );
    }
    

    这样的配置,很难满足我们的需求,比如它默认显示了 Abp 相关的 endpoints 和 schema, 没有详细的接口注释等

    image

    image

    隐藏 Abp 相关的 endpoints

    Abp 官方文档 提及了这个操作,代码如下

    services.AddAbpSwaggerGen(
        options =>
        {
            options.HideAbpEndpoints();
        }
    );
    

    隐藏 Abp 相关的 schemas

    这个在官网中没有发现,搜索到可以实现自定义的 ISchemaFilter
    参考: Hide Endpoints And Schemas from Swagger / OpenAPI

    public class HideAbpSchemaFilter : ISchemaFilter
    {
        public void Apply(OpenApiSchema schema, SchemaFilterContext context)
        {
            context.SchemaRepository.Schemas.RemoveAll(item => item.Key.StartsWith("Volo."));
        }
    }
    
    //使用方法
    services.AddAbpSwaggerGen(
        options =>
        {
            options.SchemaFilter();
        }
    );
    

    隐藏 Abp 默认生成的响应类型

    Abp 默认生成了 400,401,403,404,500,501 相关的响应

    image

    通过 AbpAspNetCoreMvcModule 这个模块的源码,我们看到了它的默认实现如下:

    Configure(options =>
    {
        var statusCodes = new List<int>
        {
            (int) HttpStatusCode.Forbidden,
            (int) HttpStatusCode.Unauthorized,
            (int) HttpStatusCode.BadRequest,
            (int) HttpStatusCode.NotFound,
            (int) HttpStatusCode.NotImplemented,
            (int) HttpStatusCode.InternalServerError
        };
    
        options.SupportedResponseTypes.AddIfNotContains(statusCodes.Select(statusCode => new ApiResponseType
        {
            Type = typeof(RemoteServiceErrorResponse),
            StatusCode = statusCode
        }));
    });
    

    那就很好解决了,我们只要把它给清除就行了,代码如下

    Configure(options =>
    {
        options.SupportedResponseTypes.Clear();
    });
    

    接口注释

    这个简单,只要包含项目的 XML 文档注释就行

    var xmlFilename1 = "EOA.User.WebApi.xml";
    var xmlFilename2 = "EOA.User.Application.xml";
    var xmlFilename3 = "EOA.User.Application.Contracts.xml";
    options.IncludeXmlComments(Path.Combine(AppContext.BaseDirectory, xmlFilename1));
    options.IncludeXmlComments(Path.Combine(AppContext.BaseDirectory, xmlFilename2));
    options.IncludeXmlComments(Path.Combine(AppContext.BaseDirectory, xmlFilename3));
    

    别忘了开启生成项目的文档注释(可以直接编辑.csproj 文件)

    <PropertyGroup>
        <TargetFramework>net6.0TargetFramework>
        <Nullable>enableNullable>
        <ImplicitUsings>enableImplicitUsings>
        <GenerateDocumentationFile>trueGenerateDocumentationFile>
        <NoWarn>$(NoWarn);1591NoWarn>
    PropertyGroup>
    

    修改 Schema 默认的时间格式

    image

    直接全局修改 DateTime 类型的 Schema 配置即可,给个默认的 Example

    options.MapType(() => new OpenApiSchema { Type = "string", Example = new Microsoft.OpenApi.Any.OpenApiString("2000-01-01 00:00:00") });
    

    结束

    本文也是实际记录我发现的一点小问题, 这么一顿操作下来是不是清爽多了

  • 相关阅读:
    第四讲 vue生命周期
    第四章 树和二叉树
    JavaWeb-05 jQuery
    python 爬虫之requests 库以及相关函数的详细介绍
    flex 完成六等分布局
    liveData和viewBinding的使用
    shell-whiptail代码如何实现调用新终端并执行命令运行程序
    Arthas使用指北——命令、原理及案例
    [信息安全] 加密算法:md5摘要算法 / sha256摘要算法
    Pytorch:Dataset类和DataLoader类
  • 原文地址:https://www.cnblogs.com/broadm/p/17769912.html