字典的模型绑定作为最小 API 中表单的一部分

问题描述 投票:0回答:1

如果您看一下这篇博文:

https://libertus.dev/posts/apsnet-dictionary-model-binder/

我正在尝试实现完全相同的效果,只是使用最少的 api。

在文档中

https://learn.microsoft.com/en-us/aspnet/core/fundamentals/apis?view=aspnetcore-8.0

它特别说:

没有对模型绑定的内置支持(IModelBinderProvider、 IModelBinder)。可以使用自定义绑定垫片添加支持。

所以,基本上与博客文章中的内容相同,只是没有

builder.Services.AddControllers(options =>
{
    options.ModelBinderProviders.Insert(0, new EnhancedDictionaryBinderProvider());
});

因为我们使用的是最小的 api 而不是控制器。

这可能吗?如果可以,如何实现?

c# asp.net-core model-binding .net-8.0 minimal-apis
1个回答
0
投票

嗯,可以在这篇关于最小 API 中的模型绑定的文章中找到直接的方法:

app.MapPost("/todos", async ([FromForm] string name, [FromForm] Visibility visibility, IFormFile? attachment, TodoDb db)
在您的情况下,我建议提取 

IFormFile

 来单独参数,并将其余所有内容提取到模型中,如下所示:

public class UploadRequest { public IDictionary<string, string> Model { get; set; } }
和端点定义:

app.MapPost("/upload", ([FromForm] UploadRequest request, IFormFile File, CancellationToken token)
大摇大摆地,它看起来像这样:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.