標籤:action etc schema logs att rip 類型 images opened
在使用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的介面文檔添加上傳檔案參數類型