如何在Web API中从Exception获取Http状态代码?

时间:2013-10-14 16:13:22

标签: c# asp.net razor asp.net-web-api

在异常捕获时,我们是否可以获取HttpStatus代码?例外情况可能是Bad Request408 Request Timeout419 Authentication Timeout?如何在异常块中处理这个?

 catch (Exception exception)
            {
                techDisciplines = new TechDisciplines { Status = "Error", Error = exception.Message };
                return this.Request.CreateResponse<TechDisciplines>(
                HttpStatusCode.BadRequest, techDisciplines);
            }

2 个答案:

答案 0 :(得分:2)

我注意到你正在捕捉一个通用的异常。您需要捕获更具体的异常才能获得其独特的属性。在这种情况下,请尝试捕获HttpException并检查其状态代码属性。

但是,如果您正在创作服务,则可能需要使用Request.CreateResponse来报告错误情况。 http://www.asp.net/web-api/overview/web-api-routing-and-actions/exception-handling有更多信息

答案 1 :(得分:2)

在我的WebAPI控制器中进行错误处理时,我遇到了同样的陷阱。我做了一些关于异常处理的最佳实践的研究,最后得到了一些像魅力一样的东西(希望它会有所帮助:)

try
{       
    // if (something bad happens in my code)
    throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.BadRequest) { Content = new StringContent("custom error message here") });
}
catch (HttpResponseException)
{
    // just rethrows exception to API caller
    throw;
}
catch (Exception x)
{
    // casts and formats general exceptions HttpResponseException so that it behaves like true Http error response with general status code 500 InternalServerError
    throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.InternalServerError) { Content = new StringContent(x.Message) });
}