我很想知道在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