ASP.NET Core从2.1升级至3.1后ProblemDetails的Instance字段缺失问题
结论
这是ASP.NET Core 3.0版本起正式引入的已知重大变更,不属于运行异常问题。
根因说明
- ASP.NET Core 2.1版本默认使用Newtonsoft.Json作为JSON序列化组件,默认配置会序列化所有属性,即使属性值为null。未显式赋值的
Instance属性默认值为null,因此会在错误返回体中输出"instance": null。 - 从ASP.NET Core 3.0版本开始,框架默认序列化组件切换为System.Text.Json,默认配置开启了忽略null值属性序列化规则,值为null的属性不会出现在最终输出的JSON结构中,因此升级后
instance字段直接消失。
可选适配方案
- 方案1:调整原有测试用例,适配新版本的序列化输出规则,这是官方推荐的升级适配方式。
- 方案2:如果需要完全兼容2.1版本的输出格式,可以修改全局JSON序列化配置,关闭忽略null值的规则,配置代码如下:
// 在Startup.cs的ConfigureServices方法中添加如下配置 services.AddControllers() .AddJsonOptions(options => { options.JsonSerializerOptions.IgnoreNullValues = false; });
内容的提问来源于stack exchange,提问作者Freddie O'Connell
相关产品推荐
相关产品推荐

