【发布时间】:2015-08-18 14:45:30
【问题描述】:
我正在尝试在 Web API 中实现自定义错误处理, 我需要从返回的 HttpResponseMessage 中获取异常。
我尝试通过以下方式获取异常信息:
response.Content.ReadAsAsync<HttpError>().Result
但我无法访问结果对象,尝试时遇到异常, 所以我显然做错了。
不知道怎么做, 我们将不胜感激。
编辑:
我的客户端代码不相关,它只是一个GET请求,服务器代码:
控制器动作抛出异常:
if (condition == true)
{
var response = new HttpResponseMessage(HttpStatusCode.BadRequest)
{
Content = new StringContent("Some Exception Related Message"),
ReasonPhrase = "Some More Info"
};
throw new HttpResponseException(response);
}
我实现的 DelegatingHandler 的 SendAsync 方法得到响应, 这就是我想要获取在上面的控制器操作中引发的异常的调用堆栈的地方。
errorDetails = new ResponseErrorDetailsFull
{
Message = "An error has occurred.",
ExceptionMessage = response.ReasonPhrase,
StackTrace = response.Content.ReadAsAsync<HttpError>().Result.StackTrace
};
编辑#2
好的,所以我发现如果我创建一个 ExceptionFilterAttribute,并覆盖 OnException(),使用我的 DelegatingHandler 上的属性,我可以访问上面代码中提到的异常。
有人能解释一下为什么会这样吗?
【问题讨论】:
-
我读到我需要从中获取 HTTPError 对象并从那里获取堆栈跟踪,但是当我尝试提取它时出现异常,所以我显然做错了。
标签: c# .net asp.net-web-api