理想的行爲是這樣的:我們捕獲異常,記錄並返回一些錯誤信息而不會崩潰。我們應該怎麼做?
根據我的理解,您可以利用Application_Error
事件捕獲ASP.NET中未處理的異常。這裏是我的測試,你可以參考一下吧:
protected void Application_Error()
{
HttpContext httpContext = HttpContext.Current;
var exception=Server.GetLastError();
var httpException = exception as HttpException ?? new HttpException(500, "Internal Server Error", exception);
var jsonResponse = new
{
Message = exception.Message,
StatusCode = httpException.GetHttpCode(),
StackTrace=httpException.StackTrace
};
httpContext.Response.ContentType = "application/json";
httpContext.Response.ContentEncoding = Encoding.UTF8;
httpContext.Response.Write(JsonConvert.SerializeObject(jsonResponse));
httpContext.Response.End();
}
注:你也可以重定向到一個特定的錯誤頁面。
此外,您可以利用web.config中的customErrors
並捕獲特定HTTP錯誤代碼的錯誤頁面。此外,您可以檢查Application_EndRequest
事件下的HTTP狀態代碼並編寫自定義響應,詳細信息可參考此類似的issue。此外,我建議您按照Demystifying ASP.NET MVC 5 Error Pages and Error Logging獲取有關錯誤處理的更多詳細信息。
我喜歡你所做的,因爲我們通過將錯誤發送給自己並向用戶顯示一個通用錯誤來做類似的事情。我們怎樣才能專門捕捉到這個錯誤?我們最近發現,我們需要專門爲某些其他函數捕獲'HttpRequestValidationException',並且希望找到一種專門捕獲此錯誤的方法。 – RoLYroLLs