如果您看一下这篇博文:
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 而不是控制器。
这可能吗?如果可以,如何实现?
嗯,可以在这篇关于最小 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)
大摇大摆地,它看起来像这样: