首页 > 其他分享 >ABP中关于Swagger的一些配置

ABP中关于Swagger的一些配置

时间:2023-10-17 15:55:56浏览次数:35  
标签:Abp HttpStatusCode int 配置 默认 ABP Swagger options

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<HideAbpSchemaFilter>();
    }
);

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

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

image

  • 通过 AbpAspNetCoreMvcModule 这个模块的源码,我们看到了它的默认实现如下:
Configure<AbpRemoteServiceApiDescriptionProviderOptions>(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<AbpRemoteServiceApiDescriptionProviderOptions>(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.0</TargetFramework>
    <Nullable>enable</Nullable>
    <ImplicitUsings>enable</ImplicitUsings>
    <GenerateDocumentationFile>true</GenerateDocumentationFile>
    <NoWarn>$(NoWarn);1591</NoWarn>
</PropertyGroup>

修改 Schema 默认的时间格式

image

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

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

结束

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

标签:Abp,HttpStatusCode,int,配置,默认,ABP,Swagger,options
From: https://www.cnblogs.com/broadm/p/17769912.html

相关文章

  • MounRiver工程配置讲解总结
    MRS配置汇总:1.MounRiver工程配置讲解一(添加全局宏定义)2.MounRiver工程配置讲解二(将灰色库的文件参与或排除编译)3.MounRiver工程配置讲解三(打印转行符和浮点数)4.MounRiver工程配置讲解四(报警告thereisahole)5.MounRiver工程配置讲解五(const变量地址不在flash中)6.......
  • Linux MySQL8.1 二进制安装和配置
    下载bin文件https://dev.mysql.com/downloads/mysql/选择LinuxGeneric,下载对应的tar包解压tar包解压完成后,目录结构如下:lsbindocsincludelibLICENSEmanREADMEsharesupport-files每个目录的内容,官方文档有说明DirectoryContentsofDirectorybi......
  • VSCode 新手入门第二期 C/C++环境配置
    前言编译器由于VSCode不像VisualStudio和DEV,CodeBlocks一样自带编译器,所以说我们得自己安装编译器现在主流编译器有许多,我这边推荐TDM-GCC,因为后面还有图形化库要配编译器下载https://jmeubank.github.io/tdm-gcc/download/正常下载中间那个tdm64版本编译器安装选Creat......
  • EPLAN 符号库的配置
    问题描述EPLAN安装破解完成之后,初次打开报错,报错的内容包括找不到符号库以及插入符号显示符号数为0 ,经过梳理发现可能是符号库的配置有问题。解决过程1.建立默认文件夹在安装目录的Data文件夹下新建中文目录如图1所示。如果安装目录没有Data文件夹,手动创建一个,并在“符号......
  • Revit 二次开发 C# 添加配置 Add-In Manager
    第一步:安装SDK,在SDK目录下获取Add-InManager插件第二步:将Add-InManager文件夹整个拷贝到C:\ProgramData\Autodesk\Revit\Addins\2022目录下;(注意:不是Revit安装目录,而是Revit的ProgramData目录,默认:C:\ProgramData\Autodesk\Revit\Addins\2022)第三步:将Add-InManager目录下Auto......
  • C2000 系列DSP使用Syscfg配置CLB模块记录
    1.1、SysConfig配置1、在工程下新建一个syscfg文件。注意文件的后缀名是.syscfg,命名任意。这时候会弹出一个弹窗,点击yes将SysConfig添加到该工程的toolchain。2、可以看到工程下多了一个GeneratedSource,并且打开工程属性,Build下也新加了SysConfig......
  • 循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(9) -- 实现系
    在WPF应用端开发,它的界面类似于Winform端,因此我们也需要对系统的菜单进行动态配置,这样才能把系统的功能弹性发挥到极致,通过动态菜单的配置方式,我们可以很容易的为系统新增所需的功能,通过权限分配的方式,可以更有效的管理系统的菜单分配到不同的角色用户,本篇随笔介绍在WPF应用端中实......
  • Windows Server 2016 Standard RemoteApp应用发布配置举例
    RemoteApp应用发布介绍RemoteApp是微软在WindowsServer2008之后,在其系统中集成的一项服务功能,用户可以通过远程桌面访问远端服务器的桌面与程序,客户端本机在无须安装操作系统与应用程序的情况下也能正常使用远端服务器发布的各种桌面与应用。而在Windows2016中RemoteApp已......
  • redisson不同版本的配置地址格式问题
       不同版本的redisson在配置地址时需要注意例如3.2.0是127.0.0.1:63793.15.4是redis://127.0.0.1:6379 在用ip地址配置时需要注意在测试环境配置地址时因为时域名所以没有暴露出来  Releases·redisson/redisson·GitHub从redisson-3.4.3......
  • vscode快速配置汇编环境
    微机原理的课程需要,简单快速记录环境的搭建找到并安装插件masm。MASM/TASM的汇编工具默认是tasm这样就无法在vscode终端进行debug,打开插件设置如下修改:测试代码实现小写字母转大写,右键运行当前程序。DATASEGMENTMEGDB'Pleaseenteralowercaseletter:','$'DAT......