首页 > 解决方案 > .NET Core 2.2 与 5.0 IActionResult“未找到”序列化

问题描述

在 .NET Core 2.2 中,在 WebAPI 控制器中返回 NotFound(),如下所示:

[HttpGet]
public IActionResult DoSomething() {
  return NotFound(new IOException("Unable to locate specified resource."));
}

将在响应正文中使用带有 JSON 的 404 状态代码进行响应,如下所示:

{
   "ClassName":"System.Exception",
   "Message":"Unable to locate specified resource.",
   "Data":null,
   "InnerException":null,
   "HelpURL":null,
   "StackTraceString":"Huge stack trace goes here...",
   "RemoteStackTraceString":null,
   "RemoteStackIndex":0,
   "ExceptionMethod":null,
   "HResult":-2146233088,
   "Source":"Namespace goes here...",
   "WatsonBuckets":null
}

但是在 .NET Core 5.0 中,完全相同的代码会生成以下 JSON:

{
   "TargetSite":null,
   "StackTrace":null,
   "Message":"Unable to locate specified resource.",
   "Data":{
      
   },
   "InnerException":null,
   "HelpLink":null,
   "Source":null,
   "HResult":-2146232800
}

现在显然 ObjectResult 的 JSON 序列化在版本之间发生了变化,但是没有抛出真正的异常并使用单独的错误处理程序手动序列化它,有没有办法配置序列化,因此 NotFound() (或任何其他 ObjectResult )将像以前一样返回完整的异常对象?

标签: asp.net-core-webapi.net-5json-serialization

解决方案


推荐阅读