Abp中SwaggerUI的接口文档添加上传文件参数类型

Posted sessionliang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Abp中SwaggerUI的接口文档添加上传文件参数类型相关的知识,希望对你有一定的参考价值。

在使用Swashbuckle上传文件的时候,在接口文档中希望看到上传控件,但是C#中,没有FromBodyAttribute这个特性,所以需要在运行时,修改参数的swagger属性。
 
首先看下,最终效果:
 
 
下面介绍实现。
 
实现原理,通过swagger提供的filter,找到action中带有SwaggerFileUpload特性的参数,然后给swagger operaion.parameters添加一个自定义的参数,即文件类型参数即可。
 
(1)定义SwaggerFileUploadAttribute。
[AttributeUsage(AttributeTargets.Parameter)]
public class SwaggerFileUploadAttribute : Attribute
{
public bool Required { get; private set; }
 
public SwaggerFileUploadAttribute(bool Required = true)
{
this.Required = Required;
}
}
View Code

 

(2)添加Filter。
/// <summary>
/// swagger file upload parameter filter
/// </summary>
public class SwaggerFileUploadFilter : IOperationFilter
{
public void Apply(Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription)
{
var parameters = apiDescription.ActionDescriptor.GetParameters();
foreach (HttpParameterDescriptor parameterDesc in parameters)
{
var fileUploadAttr = parameterDesc.GetCustomAttributes<SwaggerFileUploadAttribute>().FirstOrDefault();
if (fileUploadAttr != null)
{
operation.consumes.Add("multipart/form-data");
 
operation.parameters.Add(new Parameter
{
name = parameterDesc.ParameterName + "_file",
@in = "formData",
description = "file to upload",
required = fileUploadAttr.Required,
type = "file"
});
}
}
}
}
View Code

 

(3)给Swagger设置Filter。

 

(4)Action中的参数设置特性,测试。
Public void TestSwaggerUploadFile([SwaggerFileUpload] file){ }
 
以上四部就可以实现文章开头的效果了。

以上是关于Abp中SwaggerUI的接口文档添加上传文件参数类型的主要内容,如果未能解决你的问题,请参考以下文章

Abp中SwaggerUI的多个接口文档配置说明

给WebApi添加SwaggerUI,生成可交互接口文档

ABP官方文档翻译 5.4 SwaggerUI集成

ABP中的模块初始化过程

ABP 学习系列 - 配置Swagger

Abp Vnext手动搭建简单项目系列5