.NET 6 Minimal API中ReadFromJsonAsync对不匹配模型JSON不抛异常问题
问题原因说明
官方文档描述的异常场景与测试场景不匹配
官方文档提到的抛异常触发条件是请求Content-Type不属于JSON相关的媒体类型(比如传入application/xml、text/plain等),你使用Postman提交JSON请求时默认会携带application/json的合法Content-Type头,所以不会触发该异常逻辑。
字段不匹配不触发反序列化异常是System.Text.Json的默认行为
.NET内置的System.Text.Json序列化器默认配置规则如下:
- 忽略JSON中存在但目标模型不存在的属性,不会因此抛出异常
- 模型属性没有匹配的JSON字段时,自动使用属性声明的默认值
你的Message类的Receiver和Content属性都设置了默认值"",即使请求JSON没有任何匹配字段,反序列化得到的msg仍是合法实例,不会为null,因此会进入200返回分支。
可选调整方案
如果需要在字段不匹配/必填项缺失时触发错误,可按以下方式调整:
- 配置反序列化时检测缺失成员并抛出异常:
在调用ReadFromJsonAsync时传入自定义的JsonSerializerOptions:
var options = new JsonSerializerOptions { MissingMemberHandling = JsonMissingMemberHandling.Error }; var msg = await http.Request.ReadFromJsonAsync<Message>(options);
- 如需做必填字段校验,可给属性添加
[Required]注解,同时手动调用Validator.TryValidateObject执行校验逻辑(Minimal API默认不开启自动模型校验)。
内容的提问来源于stack exchange,提问作者GeirR
相关产品推荐
相关产品推荐

