Y.S*_*Y.S 5 .net c# asp.net-web-api
我正在尝试在Web API中实现自定义错误处理,并且需要从返回的HttpResponseMessage中获取异常。
我试图通过以下方式获取异常信息:
response.Content.ReadAsAsync<HttpError>().Result
Run Code Online (Sandbox Code Playgroud)
但是我无法访问结果对象,尝试时遇到异常,因此我显然做错了。
无法弄清楚该如何做,我们将不胜感激。
编辑:
我的客户代码不相关,只是一个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);
}
Run Code Online (Sandbox Code Playgroud)
我实现的DelegatingHandler的SendAsync方法获取响应,这是我想要获取在上述控制器操作中引发的异常的调用堆栈的地方。
errorDetails = new ResponseErrorDetailsFull
{
Message = "An error has occurred.",
ExceptionMessage = response.ReasonPhrase,
StackTrace = response.Content.ReadAsAsync<HttpError>().Result.StackTrace
};
Run Code Online (Sandbox Code Playgroud)
编辑#2
好的,所以我发现,如果我创建一个ExceptionFilterAttribute和Override OnException(),则在我的DelegatingHandler上使用该属性,就可以访问上面代码中提到的异常。
有人可以解释为什么这种方式起作用吗?
要获取HttpError响应内容,您的服务器端 API 代码需要将一个HttpError实例写入响应流。
只有这样response.Content.ReadAsAsync<HttpError>().Result才能产生该数据。
通常,如果服务器端代码引发异常,则默认行为是 HTTP 500(内部服务器错误)状态代码,响应消息中没有任何可解析的内容。
如果出现 HTTP 400(错误请求)或其他此类非 500(非 200)错误,通常会发回响应数据。(验证错误等)在这种情况下,您也许能够从响应中读取数据。
一般来说,对于任何错误情况,除非您的服务器端 API 代码未将已知类型写入响应,否则您无法从调用方的响应中读取它。
请发布您的服务器端和客户端代码,以便我们进一步帮助您。
| 归档时间: |
|
| 查看次数: |
10514 次 |
| 最近记录: |