日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

想说爱你不容易 | 使用最小 WEB API 实现文件上传(Swagger 支持)

發布時間:2023/12/4 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 想说爱你不容易 | 使用最小 WEB API 实现文件上传(Swagger 支持) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

上回,我們使用最小 WEB API 實現文件上傳功能(《想說愛你不容易 | 使用最小 WEB API 實現文件上傳》),雖然客戶端訪問是正常的,但是當打開 Swagger 頁面時,發現是這樣的:

沒法使用 Swagger 頁面測試。

允許 Content Type

正常的 Swagger 頁面應該是這樣的:

看來,我們需要指定 Content Type:

app.MapPost("/upload",async?(HttpRequest?request)?=>{var?form?=?await?request.ReadFormAsync();return?Results.Ok(form.Files.First().FileName);}).Accepts<HttpRequest>("multipart/form-data");

結果,Swagger 頁面變成了這樣,增加了一堆 Form 相關屬性,唯獨沒有 file :

看來,只有自定義 Swagger 頁面了。

自定義 OperationFilter

在 OpenAPI 3.0 中,文件上傳的請求可以用下列結構描述(https://swagger.io/docs/specification/describing-request-body/file-upload/):

而在 Swashbuckle 中,可以使用 IOperationFilter 接口實現操作篩選器,控制如何定義 Swagger UI 的行為。

在這里,我們將利用 RequestBody 對象來實現上述的文件上傳的請求結構。

public?class?FileUploadOperationFilter?:?IOperationFilter {public?void?Apply(OpenApiOperation?operation,?OperationFilterContext?context){const?string?FileUploadContentType?=?"multipart/form-data";if?(operation.RequestBody?==?null?||!operation.RequestBody.Content.Any(x?=>x.Key.Equals(FileUploadContentType,?StringComparison.InvariantCultureIgnoreCase))){return;}?if?(context.ApiDescription.ParameterDescriptions[0].Type?==?typeof(HttpRequest)){operation.RequestBody?=?new?OpenApiRequestBody{Description?=?"My IO",Content?=?new?Dictionary<String,?OpenApiMediaType>{{FileUploadContentType,?new?OpenApiMediaType{Schema?=?new?OpenApiSchema{Type?=?"object",Required?=?new?HashSet<String>{?"file"?},Properties?=?new?Dictionary<String,?OpenApiSchema>{{"file",?new?OpenApiSchema(){Type?=?"string",Format?=?"binary"}}}}}}}};}} }

然后,在啟動代碼中配置,應用此操作篩選器:

builder.Services.AddSwaggerGen(setup?=> {setup.OperationFilter<FileUploadOperationFilter>(); });

這將呈現如下 Swagger 頁面:

結論

今天,我們使用 IOperationFilter 解決了最小 WEB API 實現文件上傳的 Swagger 支持。

想了解更多內容,請關注我的個人公眾號”My IO“

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的想说爱你不容易 | 使用最小 WEB API 实现文件上传(Swagger 支持)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。