最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何使用Swagger上傳文件

 更新時(shí)間:2018年05月14日 16:09:18   作者:編程玩家  
本文將介紹如何使用Swagger來上傳文件。本文分步驟給大家介紹的非常詳細(xì),感興趣的朋友跟隨腳本之家小編一起學(xué)習(xí)吧

前言

   隨著前后端分離開發(fā)模式的普及,后端人員更多是編寫服務(wù)端API接口。調(diào)用接口實(shí)現(xiàn)文件上傳是一個(gè)常見的功能,同時(shí)也需要一個(gè)選擇文件上傳的界面,可以編寫前端界面上傳,可以使用Postman、curl來模擬上傳請(qǐng)求。上述的方式多多少少有點(diǎn)麻煩。Swagger作為Api說明文檔及調(diào)試工具,如果它能提供文件上傳的界面(默認(rèn)不提供),那會(huì)更加方便文件上傳提示,本文將介紹如何使用Swagger來上傳文件。

步驟

1. 安裝Swagger

Install-Package Swashbuckle.AspNetCore

2. 配置Swagger中間件

在Startup.ConfigureServices中添加:

services.AddSwaggerGen(c =>
{
 c.SwaggerDoc("v1", new Info { Title = "My API", Version = "v1" });
});

在Startup.Configure中添加:

app.UseSwagger();
app.UseSwaggerUI(c =>
{
 c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
});

3. 編寫API

// POST api/values
[HttpPost]
public void Post(IFormFile file)
{
 //TODO:Save file...
}
// PUT api/values/5
[HttpPut("{id}")]
public void Put(int id, IFormFile file)
{
 //TODO:Save file...
}

4. 編寫SwaggerFileUploadFilter

public class SwaggerFileUploadFilter : IOperationFilter
{
 public void Apply(Operation operation, OperationFilterContext context)
 {
  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"
   });
  }
 }
}

5. 注冊(cè)SwaggerFileUploadFilter

c.OperationFilter<SwaggerFileUploadFilter>();

6. 查看結(jié)果

POST方法:

PUT方法:

原理解析

  使用Swagger的文件上傳的關(guān)鍵在于SwaggerFileUploadFilter,它繼承于Swashbuckle的IOperationFilter,也即它只作用于Swagger,不會(huì)對(duì)其它模塊造成影響。

  我們?cè)賮砜匆幌耂waggerFileUploadFilter里面的Apply方法的邏輯:

  1. 判斷請(qǐng)求的方法是否為POST或者PUT,如果是其它請(qǐng)求方法,基本不可能是文件上傳操作。

  2. 查找方法中類型為IFormFile的參數(shù)。

  3. 設(shè)置Consumes為“multipart/form-data”。

  4. 替換IFormFile類型參數(shù)描述中的In為formData、Type為File。

源碼地址

https://github.com/ErikXu/.NetCoreTips/tree/master/SwaggerFileUpload

參考資料

http://www.talkingdotnet.com/how-to-upload-file-via-swagger-in-asp-net-core-web-api/

總結(jié)

以上所述是小編給大家介紹的如何使用Swagger上傳文件,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

最新評(píng)論

永康市| 梁山县| 炎陵县| 泸水县| 木兰县| 新巴尔虎左旗| 肥东县| 华阴市| 会东县| 琼结县| 当阳市| 惠来县| 左贡县| 海南省| 琼结县| 英吉沙县| 荣昌县| 沙湾县| 兴安县| 康平县| 益阳市| 晋江市| 张家界市| 蓝山县| 吉林省| 沐川县| 玛曲县| 阳信县| 灌云县| 车致| 武邑县| 鸡西市| 贵德县| 阳原县| 呼玛县| 汾西县| 高安市| 南乐县| 苍山县| 洪湖市| 枝江市|