如何从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"]);

断言失败。

如何从Request.CreateErrorResponse检索异常消息

我使用了您的代码并重现了问题。

我无法进入.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。如果我将上面传递给errorCreatorbool的值更改为true。在检查r时,我可以看到更多的细节。

我对WebHttp名称空间不太熟悉,所以您必须弄清楚如何从GH上的源代码将true传递给HttpError

它并不能直接回答问题,但希望它能为你指明正确的方向。