我在webapi2工作我需要知道哪种状态代码适用于哪种异常类型。我找到了一些异常类型的状态代码。但我需要完全异常而不是http状态代码列表。
if (ex.GetType() == typeof(NotImplementedException))
{
_exception = new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.NotImplemented, ex.Message));
}
else if (ex.GetType() == typeof(NullReferenceException))
{
_exception = new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.LengthRequired, ex.Message));
}
else if (ex.GetType() == typeof(OutOfMemoryException))
{
_exception = new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.UnsupportedMediaType, ex.Message));
}
else if (ex.GetType() == typeof(OverflowException))
{
_exception = new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.RequestEntityTooLarge, ex.Message));
}
else if (ex.GetType() == typeof(StackOverflowException))
{
_exception = new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.RequestEntityTooLarge, ex.Message));
}
else if (ex.GetType() == typeof(TypeInitializationException))
{
_exception = new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.NoContent, ex.Message));
}
else if (ex.GetType() == typeof(HttpException))
{
_exception = new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, ex.Message));
}
答案 0 :(得分:0)
尝试将.NET例外映射到HTTP状态代码是不可能的。我看到NotAcceptable
正在使用,因为开发人员似乎认为请求“不可接受”实际上NotAcceptable
(406)用于内容协商,而您的代码映射OverflowException
到RequestEntityTooLarge
(413)。这通知客户端发送的请求对于服务器来说太大了,而实际上服务器上的溢出显然是InternalServerError
(500)。
只需将您的所有错误映射到BadRequest
(400),Forbidden
(403)和InternalServerError
(500)(以及其他一些合适的状态代码),但不要更改状态代码的含义 - 它们是HTTP标准的一部分。
您可以自由地详细说明您在代码中所做的邮件内容中的错误。