作为我正在尝试完成的示例,我在这里MapPost
手动解析 HTTP 请求的正文。
// Program.cs
using System.Text.Json;
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
Type[] types = new[] { typeof(SampleDto1), typeof(SampleDto2), <other unknown types> };
foreach (var type in types)
{
app.MapPost(type.Name, async (HttpContext httpContext) =>
{
var request = await JsonSerializer.DeserializeAsync(
httpContext.Request.Body,
type,
new JsonSerializerOptions(JsonSerializerDefaults.Web),
httpContext.RequestAborted);
return Results.Ok(request);
});
}
app.Run();
internal record SampleDto1(string Input) { }
internal record SampleDto2(string Input) { }
这行得通,耶!但是,... ASP.NET Core 的 MVC 具有所有这些复杂的 ModelBinding 功能,我真的很想使用它。因为这开辟了绑定到查询字符串参数和其他来源的可能性,而不仅仅是请求正文。
基本上我想JsonSerializer
用调用框架代码替换调用。
我一直在浏览 ASP.NET Core 源代码,起初DefaultModelBindingContext
看起来很有希望。但是,我很快偶然发现了一些我无法从我的代码中访问的内部类。
长话短说,.. 是否有可能从应用程序代码插入 MVC 的模型绑定?
更新:虽然它没有从最初的问题中显示出来,但该解决方案应该可以动态地处理任何请求类型。不仅SampleDto1
和SampleDto2
。这就是为什么来自 Minimal API 的显式参数绑定不起作用的原因。