如何从Request.CreateErrorResponse检索异常消息
本文关键字:检索 异常 消息 CreateErrorResponse Request | 更新日期: 2023-09-27 17:59:55
我的控制器中有以下代码:
return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, new Exception("Your cat is too small"));
在我的调用代码中,我想检索Exception,或者至少检索错误。我写了这个代码:
ObjectContent objContent = response.Content as ObjectContent;
objContent的类型是HttpError
,所以我提取了它:
HttpError error = objContent.Value as HttpError;
但error
似乎是一个只有一个值的字典,关键字:Message,ValueL"发生错误"
我看不出有任何异常的迹象。
Assert.AreEqual("Your cat is too small", error["Message"]);
断言失败。
我使用了您的代码并重现了问题。
我无法进入.NET代码来了解Exception
被吞噬的原因,所以我查看了GitHub上的HttpRequestMessageExtensions源代码,发现它将Exception
传递给一个新的HttpError
对象,该对象是根据配置创建的(第459行)。
我取了.NET代码,修改了下面的内容,看看会发生什么。
private static HttpResponseMessage Test()
{
HttpRequestMessage request = new HttpRequestMessage();
return Test2(HttpStatusCode.InternalServerError, new Exception("Your cat is adequately sized."));
}
public static HttpResponseMessage Test2(HttpStatusCode statusCode, Exception exception)
{
return Test2(statusCode, includeErrorDetail => new HttpError(exception, includeErrorDetail));
}
private static HttpResponseMessage Test2(HttpStatusCode statusCode, Func< bool, HttpError > errorCreator)
{
HttpError r = errorCreator(false);
return null;
}
当我检查r
的值时,我看不到Exception
。如果我将上面传递给errorCreator
的bool
的值更改为true
。在检查r
时,我可以看到更多的细节。
我对Web
或Http
名称空间不太熟悉,所以您必须弄清楚如何从GH上的源代码将true传递给HttpError
它并不能直接回答问题,但希望它能为你指明正确的方向。