讓我們假設我有以下方法在我的HttpHandler(ashx的):爲jquery.ajax生成自定義錯誤()
private void Foo()
{
try
{
throw new Exception("blah");
}
catch(Exception e)
{
HttpContext.Current.Response.Write(
serializer.Serialize(new AjaxError(e)));
}
}
[Serializable]
public class AjaxError
{
public string Message { get; set; }
public string InnerException { get; set; }
public string StackTrace { get; set; }
public AjaxError(Exception e)
{
if (e != null)
{
this.Message = e.Message;
this.StackTrace = e.StackTrace;
this.InnerException = e.InnerException != null ?
e.InnerException.Message : null;
HttpContext.Current.Response.StatusDescription = "CustomError";
}
}
}
當我做出$.ajax()
調用方法,我將結束success
回調,無論後端出了什麼問題,我最終在catch
塊。
我已經擴展了ajax方法來規範化錯誤處理,所以無論它是「jquery」錯誤(解析錯誤等)還是我的自定義錯誤,我都會在錯誤回調中結束。
現在,我想知道是什麼,應該怎麼加像
HttpContext.Current.Response.StatusCode = 500;
東西jQuerys錯誤處理程序結束,或者我應該處理我
HttpContext.Current.Response.StatusDescription = "CustomError";
的jqXHR對象,並假設它出現錯誤?
讓我知道,如果有什麼不清楚。
您應該將錯誤代碼發送到4xx或5xx系列,以使它陷入錯誤回調,HTTP代碼列表http://en.wikipedia.org/wiki/List_of_HTTP_status_codes –
@Furqan你會建議哪一個?我已經看到了這個列表,但是,imo,它們都不符合我的需求。我的意思是,你真的可以將我的自定義錯誤歸類爲「內部服務器錯誤」嗎? – Johan
如果它們都不匹配你的代碼,你可以發送你自己的代碼,如450,它只會讓你的電話落在錯誤處理程序中,並且你可以檢查你的自定義代碼並適當地處理。 –