我正在从webApi返回异常,并希望相应地捕获它们。
WebAPI代码如下所示:
try
{
_sessionProvider.Login(sessionId, user);
}
catch (UserLimitExceededException ex)
{
return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, ex);
}
当我使用.NET HttpClient调用此webAPI时,我想捕获此异常并正确识别它。
我该怎么做?
答案 0 :(得分:0)
无法将响应捕获为HttpClient上的异常。就HttpClient而言,它仅从WebAPI收到响应,状态代码为500.
您必须检查响应中的状态代码并在客户端采取相应措施。在客户端将响应转换为.Net异常的任何其他方法都是非标准的。
答案 1 :(得分:0)
好吧,首先,异常不会以原生.NET意义传播到客户端。没有“神奇”来实现这一目标。
当您致电CreateErrorResponse
时,它最终会创建一个状态为500的HttpResponseMessage
,其内容将是HttpError
个实例,该实例会在线路上创建例外代表。 HttpError
将使用内容协商选择的任何格式化程序进行序列化,因此,例如,如果请求的类型为application/json
,则HttpError
将被序列化为JSON表示。
在客户端,如果您是.NET,则必须检测500,然后您可以使用httpResponseMessage.Content.ReadAsAsync<HttpError>()
将其反序列化为结构化的内容,然后您可以从中读取详细信息。