使用www.example.com最低API将ifromFile上传到数据库中asp.net

vqlkdk9b  于 2023-01-27  发布在  .NET
关注(0)|答案(2)|浏览(167)

是否可以使用www.example.com最小API从DTO上传文件?asp.net minimal api's ?
我试过这个:

public class MyDto
{
    public string BlaBlaBla { get; set; }
    public List<ListOfUselessStuff> MyList { get; set; }
    public IFormFile MyFile { get; set; }
}

终点

app.MapPost("MyRoute", DoStuff)
   .WithTags("Tags")
   .Accepts<MyDto>("multipart/form-data")
   .Produces<NewlyCreatedDto>(200)
   .ProducesValidationProblem(400)
   .ProducesProblem(401)
   .ProducesProblem(403)
   .RequireAuthorization(Policies.RequireAdmin);

最后做点什么:

private async Task<IResult> CreateQuestion([FromServices]IMediator mediator, [FromForm] MyDto dto)
{
                    //do stuff
}

但我只是设法得到:
"应为支持的JSON媒体类型,但获得的是" multipart/form-data;边界=--------------------------29663231333811935594178759367 ""。

wgeznvg7

wgeznvg71#

目前还没有对绑定表单的支持,但根据ASP.NET核心官方文档,将来会有。
不支持从窗体绑定。这包括绑定IFormFile。我们计划将来添加对IFormFile的支持。
https://learn.microsoft.com/en-us/aspnet/core/tutorials/min-web-api?view=aspnetcore-6.0&tabs=visual-studio#differences-between-minimal-apis-and-apis-with-controllers
您所能做的就是注入HttpRequest并访问表单属性,就像在这个解决方案https://stackoverflow.com/a/71499716/11618303中一样。

blpfk2vs

blpfk2vs2#

NET 7已经解决了这个问题。增加了对IFormFile和IFormFileCollection的支持。您应该可以在MediatR管道中使用它。
参考:.NET 7对文件上载绑定的最低API支持

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet("/", () => "Hello World!");

app.MapPost("/upload", async (IFormFile file) =>
{
    var tempFile = Path.GetTempFileName();
    app.Logger.LogInformation(tempFile);
    using var stream = File.OpenWrite(tempFile);
    await file.CopyToAsync(stream);
});

app.MapPost("/upload_many", async (IFormFileCollection myFiles) =>
{
    foreach (var file in myFiles)
    {
        var tempFile = Path.GetTempFileName();
        app.Logger.LogInformation(tempFile);
        using var stream = File.OpenWrite(tempFile);
        await file.CopyToAsync(stream);
    }
});

app.Run();

相关问题