我在运行于AWS Lambda的.Net 6 Minimal API中有以下代码。
在Program.cs:中
app.MapPost("/{id:Guid}/test", TestHandler.Test);
在一个单独的文件中:
public static async Task<IResult> Test(TestEvent testEvent, HttpContext context, IConfiguration configuration){
...
}
我使用test/json
得到一个415,或者使用application/json
得到一个400。如果我移除POCO:
public static async Task<IResult> Test(HttpContext context, IConfiguration configuration)
我可以在没有任何问题的情况下取消请求正文的名称。
string body = await new StreamReader(context.Request.Body).ReadToEndAsync();
var testEvent = JsonSerializer.Deserialize<TestEvent>(body);
但是无法以任何其他方式使序列化工作,我宁愿不必手动反序列化我的所有POST。这不起作用有什么明显的原因吗?
当我在本地运行API时,反序列化会正常工作,因此它与AWS ApiGateway或Lambda有关。
看起来AWS对JSON做了一些System.Text.JSON.Serialization无法处理的事情。发现以下内容后,我切换到Newtonsoft.Json反序列化程序:https://stackoverflow.com/a/69867815/1663834.