如何从 WebAPI 中的异常中获取 HttpStatusCode
本文关键字:异常 获取 HttpStatusCode WebAPI | 更新日期: 2023-09-27 18:35:21
无论如何,
当捕获异常时,我们可以获取HttpStatus代码吗?例外可能是Bad Request
、408 Request Timeout
、419 Authentication Timeout
?如何在异常块中处理这个问题?
catch (Exception exception)
{
techDisciplines = new TechDisciplines { Status = "Error", Error = exception.Message };
return this.Request.CreateResponse<TechDisciplines>(
HttpStatusCode.BadRequest, techDisciplines);
}
我注意到你正在捕获一个通用异常。您需要捕获更具体的异常才能获得其唯一属性。在这种情况下,请尝试捕获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) });
}