我的控制器中有这个代码:
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"]);
断言失败。
答案 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
时,我可以看到更多细节。
我对r
或Web
命名空间不满意,因此您必须弄清楚如何从源上传递true Http
GH。
它并没有直接回答这个问题,但希望它能指出你正确的方向。