前提: 需要nuget Swashbuckle.AspNetCore 我暫時用的是 4.01 最新版本; 描述:解決 .net core webapi 上傳文件使用的是 IFormFile,在Swagger 介面描敘的時候很不友好,為解決介面文檔的友好描敘; 實際效果: 解決辦法: 步驟1 增加 S ...
前提:
需要nuget Swashbuckle.AspNetCore 我暫時用的是 4.01 最新版本;
描述:解決 .net core webapi 上傳文件使用的是 IFormFile,在Swagger 介面描敘的時候很不友好,為解決介面文檔的友好描敘;
實際效果:
解決辦法:
步驟1 增加 Swagger 的選項過濾器 SwaggerFileUploadFilter.cs
/// <summary> /// Swagger 上傳文件過濾器 /// </summary> public class SwaggerFileUploadFilter : IOperationFilter { /// <summary> /// 應用過濾器 /// </summary> /// <param name="operation"></param> /// <param name="context"></param> public void Apply(Operation operation, OperationFilterContext context) { #region 文件上傳處理 if (!context.ApiDescription.HttpMethod.Equals("POST", StringComparison.OrdinalIgnoreCase) && !context.ApiDescription.HttpMethod.Equals("PUT", StringComparison.OrdinalIgnoreCase)) { return; } var fileParameters = context.ApiDescription.ActionDescriptor.Parameters.Where(n => n.ParameterType == typeof(IFormFile)).ToList(); if (fileParameters.Count < 0) { return; } operation.Consumes.Add("multipart/form-data"); foreach (var fileParameter in fileParameters) { var parameter = operation.Parameters.Single(n => n.Name == fileParameter.Name); operation.Parameters.Remove(parameter); operation.Parameters.Add(new NonBodyParameter { Name = parameter.Name, In = "formData", Description = parameter.Description, Required = parameter.Required, Type = "file" }); } #endregion } }
步驟2 對 startup.cs swagger 配置項進行過濾
services.AddSwaggerGen(options => { .......... options.OperationFilter<SwaggerFileUploadFilter>(); });