如何从.NET Web API中捕获异常

时间:2015-01-07 16:24:10

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

我正在从webApi返回异常,并希望相应地捕获它们。

WebAPI代码如下所示:

try
{
    _sessionProvider.Login(sessionId, user);
}
catch (UserLimitExceededException ex)
{
    return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, ex);
}

当我使用.NET HttpClient调用此webAPI时,我想捕获此异常并正确识别它。

我该怎么做?

2 个答案:

答案 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>()将其反序列化为结构化的内容,然后您可以从中读取详细信息。