溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何使用最小WEB?API實(shí)現(xiàn)文件上傳

發(fā)布時間:2022-02-21 09:13:06 來源:億速云 閱讀:185 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要介紹“如何使用最小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)是這樣的:

如何使用最小WEB?API實(shí)現(xiàn)文件上傳

沒法使用 Swagger 頁面測試。

一、允許 Content Type

正常的 Swagger 頁面應(yīng)該是這樣的:

如何使用最小WEB?API實(shí)現(xiàn)文件上傳

看來,我們需要指定 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 :

如何使用最小WEB?API實(shí)現(xiàn)文件上傳

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

二、自定義 OperationFilter

在 OpenAPI 3.0 中,文件上傳的請求可以用下列結(jié)構(gòu)描述:

如何使用最小WEB?API實(shí)現(xiàn)文件上傳

而在 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 頁面:

如何使用最小WEB?API實(shí)現(xiàn)文件上傳

關(guān)于“如何使用最小WEB API實(shí)現(xiàn)文件上傳”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識,可以關(guān)注億速云行業(yè)資訊頻道,小編每天都會為大家更新不同的知識點(diǎn)。

向AI問一下細(xì)節(jié)

免責(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)容。

AI