异常对象未在 JsonResult 构造函数中序列化



在我的 ASP.NET 核心WebAPI控制器中,当我将异常对象传递给JsonResult时,它似乎无法识别任何异常属性并相应地填充它们(它只是返回没有文本的500(。 但是,当我新创建一个匿名对象并将其传入时,它会以您所期望的方式返回 500。 似乎在直接和完整地映射异常对象时遇到了一个大问题。 我想知道是否存在配置问题/选项。

[HttpGet]
public IActionResult GetSomething()
{
try
{
throw new Exception("hey");
}
catch (Exception e)
{
// the following does not work as expected
return new JsonResult(e)
{
StatusCode = StatusCodes.Status500InternalServerError
};
// the following works as expected
return new JsonResult(new { Message = e.Message })
{
StatusCode = StatusCodes.Status500InternalServerError
};
}
}

当你传递整个Exception对象时,它会尝试将其序列化为Json,包括所有嵌套对象。序列化可能只是超过最大深度并引发异常。
无论如何,我会说这不是将整个Exception返回给客户端的好做法,因为您可能会暴露敏感信息。最好只发送客户可能需要的内容。

以下似乎是一个合理的解决方案。 生成您自己的类,该类在构造函数中接受 Exception 对象,并避免尝试复制 TargetSite 属性。

return new JsonResult(new { Exception = new ExceptionMapper(e) })
{
StatusCode = StatusCodes.Status500InternalServerError
};

最新更新