我正在尋找一種好的/聰明的/乾淨的方式來全局處理錯誤,以便如果請求是Json併發生異常,結果應該是json而不是html。MVC 3 json請求應該收到異常的json響應
尋找現有的解決方案或如何建立自己的一些信息。
我正在尋找一種好的/聰明的/乾淨的方式來全局處理錯誤,以便如果請求是Json併發生異常,結果應該是json而不是html。MVC 3 json請求應該收到異常的json響應
尋找現有的解決方案或如何建立自己的一些信息。
的常用方法是編寫自定義異常過濾器:
public class MyErrorHandlerAttribute : FilterAttribute, IExceptionFilter
{
public void OnException(ExceptionContext filterContext)
{
filterContext.ExceptionHandled = true;
filterContext.Result = new JsonResult
{
Data = new { success = false, error = filterContext.Exception.ToString() },
JsonRequestBehavior = JsonRequestBehavior.AllowGet
};
}
}
這可以被註冊爲在Global.asax中的全局過濾器。然後簡單地查詢一些行動:
$.getJSON('/someController/someAction', function (result) {
if (!result.success) {
alert(result.error);
} else {
// handle the success
}
});
這可能是一個自定義屬性...可能甚至是HandleErrorAttribute
的子類。技巧將是如何知道控制器操作是否要返回JSON。這可以像加入後綴GetCustomerDetailsJson
這些方法名稱一樣簡單。要做到這一點
這不會運行每個異常? – Dashu 2011-05-02 17:41:40
@Dashu,是的,每個例外。您還可以測試請求是否是AJAX請求,以及請求內容類型是否爲application/json,並且只有在這種情況下才處理異常。 – 2011-05-02 18:45:46
看起來像一個很好的解決方案,謝謝Darin! – Dashu 2011-05-03 08:40:40