如何从 WebAPI 中的异常中获取 HttpStatusCode

本文关键字:异常 获取 HttpStatusCode WebAPI | 更新日期: 2023-09-27 18:35:21

无论如何,

当捕获异常时,我们可以获取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);
            }

如何从 WebAPI 中的异常中获取 HttpStatusCode

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

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

在我的 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) });
}