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

时间:2016-08-03 14:39:46

标签: c# asp.net-web-api

我的控制器中有这个代码:

return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, new Exception("Your cat is too small"));

在我的调用代码中,我想要检索异常或至少是错误。我写了这段代码:

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

断言失败。

1 个答案:

答案 0 :(得分:1)

我使用了你的代码并重现了这个问题。

我无法介入.NET代码以查看为什么Exception被吞下,所以我看了HttpRequestMessageExtensions source on GitHub并发现它通过了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。如果我将传递给bool的{​​{1}}的值更改为errorCreator。检查true时,我可以看到更多细节。

我对rWeb命名空间不满意,因此您必须弄清楚如何从源上传递true Http GH。

它并没有直接回答这个问题,但希望它能指出你正确的方向。