原本一直在使用的 Swashbuckle 原來已經不更新,讓下載檔案的功能不正常,改用 Swagger-Net 就可以解決這個問題囉
開發環境
- VS 2017
- .NET 4.7.2
續用上一篇的範例 https://dotblogs.com.tw/yc421206/2019/02/15/web_api_file_upload_download
下載
用 Swagger 測試
- Install-Package Swashbuckle
有關安裝請參考以下連結
https://dotblogs.com.tw/yc421206/2018/09/29/swagger_install_swashbuckle
這看起來很棒,但是當我按 Download 時,檔案開起來都是空的,檢查檔案大小,也不一樣了
換 Postman 試試
是正常的阿...
原來這是 Swagger UI 的 bug,Swashbuckle 用的是 Swagger UI 2.2,Swagger UI 3.x已經解決這個問題了。
https://github.com/domaindrivendev/Swashbuckle/issues/1064
Swashbuckle.AspNetCore 則是使用 Swagger UI 3.x
我仍保留有問題的 Swagger 專案,有興趣的可以直接下載測試
https://github.com/yaochangyu/sample.dotblog/tree/master/WebAPI/Swagger/UploadAndDownloadFiles/ServerSwashbuckle
解法左轉到 Swagger-Net
先移除
- Uninstall-Package Swashbuckle
- Uninstall-Package Swashbuckle.Core
再安裝
- Install-Package Swagger-Net
下載 pdf 空白的問題就解決了
上傳
為特定的 Action 加上參數,目的是為了有上傳按鈕可以按
public class FileOperationFilter : IOperationFilter { public void Apply(Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription) { if (operation.operationId.ToLower() == "file_upload") { if (operation.parameters == null) { operation.parameters = new List<Parameter>(); } else { operation.parameters.Clear(); } operation.parameters.Add(new Parameter { name = "File1", @in = "formData", description = "Upload software package", required = false, type = "file" }); operation.parameters.Add(new Parameter { name = "File2", @in = "formData", description = "Upload software package", required = false, type = "file" }); operation.description = "swagger upload"; operation.consumes.Add("application/form-data"); } } }
@SwaggerConfig.cs
套用 Filter
c.OperationFilter<FileOperationFilter>();
完成之後,畫面長這樣
完整範例下載
https://github.com/yaochangyu/sample.dotblog/tree/master/WebAPI/Swagger/UploadAndDownloadFiles
若有謬誤,煩請告知,新手發帖請多包涵
Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET