您好,登錄后才能下訂單哦!
這篇文章主要介紹“如何使用最小WEB API實(shí)現(xiàn)文件上傳”的相關(guān)知識,小編通過實(shí)際案例向大家展示操作過程,操作方法簡單快捷,實(shí)用性強(qiáng),希望這篇“如何使用最小WEB API實(shí)現(xiàn)文件上傳”文章能幫助大家解決問題。
我們使用最小 WEB API 實(shí)現(xiàn)文件上傳功能,雖然客戶端訪問是正常的,但是當(dāng)打開 Swagger 頁面時,發(fā)現(xiàn)是這樣的:
沒法使用 Swagger
頁面測試。
正常的 Swagger 頁面應(yīng)該是這樣的:
看來,我們需要指定 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");
結(jié)果,Swagger 頁面變成了這樣,增加了一堆 Form 相關(guān)屬性,唯獨(dú)沒有 file :
看來,只有自定義 Swagger 頁面了。
在 OpenAPI 3.0 中,文件上傳的請求可以用下列結(jié)構(gòu)描述:
而在 Swashbuckle
中,可以使用 IOperationFilter
接口實(shí)現(xiàn)操作篩選器,控制如何定義 Swagger UI
的行為。
在這里,我們將利用 RequestBody
對象來實(shí)現(xiàn)上述的文件上傳的請求結(jié)構(gòu)。
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" } } } } } } } }; } } }
然后,在啟動代碼中配置,應(yīng)用此操作篩選器:
builder.Services.AddSwaggerGen(setup => { setup.OperationFilter<FileUploadOperationFilter>(); });
這將呈現(xiàn)如下 Swagger 頁面:
關(guān)于“如何使用最小WEB API實(shí)現(xiàn)文件上傳”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識,可以關(guān)注億速云行業(yè)資訊頻道,小編每天都會為大家更新不同的知識點(diǎn)。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。