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){ }
 
以上四部就可以實現文章開頭的效果了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM