.NetCore WebApi利用Swagger文檔實現選擇文件上傳


介紹

實現這個功能主要還是依賴過濾器

在Swagger中利用 IOperationFilter 操作來實現文件上傳

與之前處理結合Idr4授權一樣的處理方式,不同的是授權處理的是Security,而文件上傳要處理的是Parameters,具體是IFormFile參數處理

IFormFile 在  Microsoft.AspNetCore.Http 命名空間下

怎么來處理呢?

options.OperationFilter<IdentityServer4OAuth2OperationFilter>();

這是之前處理授權用的,名稱就這樣了,接下來我在里面去處理

處理方式有幾種

你可以根據路由來判斷也可以根據參數類型來處理,這里我根據參數類型來處理,只要包含了IFormFile 就生成該文件

第一步:獲取IFormFile 參數類型的 參數

var files = context.ApiDescription.ActionDescriptor.Parameters.Where(n => n.ParameterType == typeof(IFormFile)).ToList();

第二步:遍歷替換這些參數

 for (int i = 0; i < files.Count; i++)
                {
                    if (i == 0)
                    {
                        operation.Parameters.Clear();
                    }
                    operation.Parameters.Add(new NonBodyParameter
                    {
                        Name = files[i].Name,
                        In = "formData",
                        Description = "Upload File",
                        Required = true,
                        Type = "file"
                    });
                  
                }
  operation.Consumes.Add("multipart/form-data");
 

這里需要注意的就是這句話 

 operation.Parameters.Clear();

需要清除原來中的參數,如果不清除你會看到下面的效果(富含了原有參數 IFormFile)

 清除了之后看下實際效果,其實就是替換掉原有的參數形式

這里還有一點值得注意的就是 請求的參數要與 重新添加的參數名稱要一致 不然提交獲取不到相關的文件信息(如果你是手寫的話要注意這點,我這里是動態獲取的參數,所以不存在這個問題)

 

 

 下面是完成代碼,這里面附帶了 Idr4的授權 不需要可以刪除掉

public class IdentityServer4OAuth2OperationFilter : IOperationFilter
    {
        public void Apply(Operation operation, OperationFilterContext context)
        {



            #region Swagger授權處理
            if (operation.Security == null)
            {
                operation.Security = new List<IDictionary<string, IEnumerable<string>>>();
            }
            else
            {
                operation.Security.Add(new Dictionary<string, IEnumerable<string>>
                                        {

                                              {"oauth2", new List<string> { "openid", "profile", "userservicesapi" }}
                                        });
            }
            #endregion


            #region Swagger 文件上傳處理

            var files = context.ApiDescription.ActionDescriptor.Parameters.Where(n => n.ParameterType == typeof(IFormFile)).ToList();
            if (files.Count > 0)
            {
                for (int i = 0; i < files.Count; i++)
                {
                    if (i == 0)
                    {
                        operation.Parameters.Clear();
                    }
                    operation.Parameters.Add(new NonBodyParameter
                    {
                        Name = files[i].Name,
                        In = "formData",
                        Description = "Upload File",
                        Required = true,
                        Type = "file"
                    });
                   
                }
       operation.Consumes.Add("multipart/form-data");
  }
  
#endregion
  }
}

選擇文件運行下 兩個文件都接受到了

 

 

 


免責聲明!

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



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