Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# JsonResult构造函数中未序列化异常对象_C#_Asp.net Core Webapi - Fatal编程技术网

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

C# JsonResult构造函数中未序列化异常对象,c#,asp.net-core-webapi,C#,Asp.net Core Webapi,在我的ASP.NET Core WebAPI控制器中,当我将异常对象传递给JsonResult时,它似乎无法识别任何异常属性并相应地填充它们(它只返回不带文本的500)。但是,当我新建一个匿名对象并将其传入时,它会返回500,其中包含您所期望的内容。似乎它在直接和完整地映射异常对象时遇到了一个大问题。我想知道是否存在配置问题/选项 [HttpGet] public IActionResult GetSomething() { try { throw new Exc

在我的ASP.NET Core 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
,包括所有嵌套对象。序列化可能只是超出了最大深度并引发异常。

无论如何,我想说,将整个
异常
返回给客户端并不是一个好的做法,因为您可能会暴露敏感信息。最好只发送客户可能需要的内容。

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

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

你使用什么版本的ASP.Net core?@Piotr,ASP.Net core 3。0@CINCHAPPS创建新的类继承异常并没有区别,您仍然拥有可能超过最大深度的所有属性,特别是在您具有交叉引用属性的情况下(parent有child,child有parent,这是序列化程序无法处理的无限引用)我继续深入研究,创建了另一个类(ExceptionMapper),该类映射了一些异常属性(在新类的构造函数中传递异常,将属性从exception对象复制到新ExceptionMapper对象)。当它尝试复制TargetSite属性时,该进程会崩溃,因此我猜JSON序列化程序中的某些内容无法处理可为null的MethodBase,这并不令人惊讶。我在注释中出错。我不是说我继承了异常。它不继承任何内容。它处理消息、StackTrace、,Source、InnerException、Data、HResult和HelpLink没有问题。@Cincaps得到了它,如果您在新类中使用属性
MethodBase TargetSite
,则可能是我在与交叉引用相关的注释中描述的情况