1

问题是,我有一个从 Urls 连接 pdf 的 API,它在 .NET 5 中工作,但是当开始迁移到 .NET 6 时,使用 IEnumerable<> 、 IFormFile 和 IFormFileCollection ,只接受请求 application/json .

这是 .NET 5 (Working) 中的端点

[HttpPost]
        public async Task<IActionResult> ConcatenarPdfsByUrl([FromForm] IEnumerable<string> urls)
        {
            var output = await TransformaPdfCore.PdfConcatenation(urls);
            return File(output, "application/octet-stream");
        }

结果:Imagem 1(.net 5)

Minimal .net6 中的端点也是如此

app.MapPost("/ConcatenaPdfsByUrl", async Task<IResult> (IEnumerable<string> urls, TransformaPdfCore transforma) =>
{
    {
        var output = await transforma.PdfConcatenation(urls);
        return Results.File(output, "application/octet-stream");
    }
}).Accepts<IEnumerable<string>>("multipart/form-data");

但结果是这样的:Imagem 2 (.net 6)

问题是,为什么 IEnumerable 没有相同的行为?如果有任何解决方案,例如使用 IOperationFilter,以便我可以使其工作。

IFormFileCollection 接口有同样的问题

4

1 回答 1

0

目前,最小 API 不支持从表单绑定。您可以在 github 上跟踪此问题- 对 .NET 7 的支持进行了调查。您可以尝试通过BindAsync使用方法从表单实现自定义绑定,HttpContext.Request.Form或者只是将HttpContext参数添加到您的处理程序方法并在那里使用它:

app.MapPost("/ConcatenaPdfsByUrl", async (HttpContext context, TransformaPdfCore transforma) =>
{
    // use context.Request.Form or context.Request.Form.Files
    var output = await transforma.PdfConcatenation(urls);
    return Results.File(output, "application/octet-stream");
})
于 2022-01-22T20:08:18.290 回答