我很想知道在ODataController中引发异常的最佳做法。ASP.NET Odata Web API的错误处理
如果您在方法中引发异常,则默认将其转换为500的响应代码,并且内容具有有关错误的详细信息。我希望明确响应代码并在无效密钥的情况下发送400。
例如:如果输入请求有一个无效键想要返回一个400的HttpResponseCode,并且内容应该有类似于引发异常的错误细节。
非常感谢您的输入
我很想知道在ODataController中引发异常的最佳做法。ASP.NET Odata Web API的错误处理
如果您在方法中引发异常,则默认将其转换为500的响应代码,并且内容具有有关错误的详细信息。我希望明确响应代码并在无效密钥的情况下发送400。
例如:如果输入请求有一个无效键想要返回一个400的HttpResponseCode,并且内容应该有类似于引发异常的错误细节。
非常感谢您的输入
使用HttpResponseException
,
例如throw new HttpResponseException(HttpStatusCode.NotFound);
。
详情请见here。
的OData(至少从V3)使用specific json表示错误:
{
"error": {
"code": "A custom error code",
"message": {
"lang": "en-us",
"value": "A custom long message for the user."
},
"innererror": {
"trace": [...],
"context": {...}
}
}
}
微软的.Net包含Microsoft.Data.OData.ODataError和Microsoft.Data.OData.ODataInnerError类,以在服务器端的OData错误。
要形成正确的OData错误响应(HttpResponseMessage),包含错误的详细信息,您可以:使用System.Web.OData.Extensions.HttpRequestMessageExtensions.CreateErrorResponse方法
1)形式和控制器的行动返回HttpResponseMessage
return Request.CreateErrorResponse(HttpStatusCode.Conflict, new ODataError { ErrorCode="...", Message="...", MessageLanguage="..." }));
2)抛出HttpResponseException使用同样的方法创建HttpResponseMessage
throw new HttpResponseException(
Request.CreateErrorResponse(HttpStatusCode.NotFound, new ODataError { ErrorCode="...", Message="...", MessageLanguage="..." }));
3)抛出自定义类型异常并使用网络API操作筛选
public class CustomExceptionFilterAttribute : ExceptionFilterAttribute
{
public override void OnException(HttpActionExecutedContext context)
{
if (context.Exception is CustomException)
{
var e = (CustomException)context.Exception;
var response = context.Request.CreateErrorResponse(e.StatusCode, new ODataError
{
ErrorCode = e.StatusCodeString,
Message = e.Message,
MessageLanguage = e.MessageLanguage
});
context.Response = response;
}
else
base.OnException(context);
}
}
什么用'CreateODataErrorResponse'扩展方法,我们何时应该使用它吗? – Rahul
钥匙未发现应提高其转换404 – qujck