如果有在ASP.NET MVC未處理的服務器錯誤500返回JSON,服務器返回一個HTML頁面是這樣的:當未處理的錯誤500拋出異常
問題:是它可能配置應用程序,以便它返回一個JSON而不是上述HTML的相同信息?
如:
{
Title:'Maximum request length exceeded',
Description:'An unhandled eception .....',
...etc
}
如果有在ASP.NET MVC未處理的服務器錯誤500返回JSON,服務器返回一個HTML頁面是這樣的:當未處理的錯誤500拋出異常
問題:是它可能配置應用程序,以便它返回一個JSON而不是上述HTML的相同信息?
如:
{
Title:'Maximum request length exceeded',
Description:'An unhandled eception .....',
...etc
}
您需要捕獲錯誤somehwere適當[我建議控制器例如從HandleErrorAttribute繼承上使用自定義錯誤過濾器],並覆蓋onException的方法,從那裏你可以檢查它是Ajax,然後做一些其他的事情,這裏是我之前寫的一個片段(還沒幹淨) 並且不要忘記設置狀態碼!
if (filterContext.HttpContext.Request.IsAjaxRequest())
{
JsonResultObject result = new JsonResultObject();
result.Success = false;
string message = ("Common.WeAreFixing" + " , #" + errorLog.Id.ToString("00000"));
if (filterContext.HttpContext.Request.IsLocal)
{
message = filterContext.Exception.Message + Environment.NewLine + "st: " +
(filterContext.Exception.StackTrace ?? "");
}
result.AlertMessage = new Alert(message, Alert.Type.Error);
filterContext.HttpContext.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
filterContext.Result = new JsonDotNetResult()
{
JsonRequestBehavior = JsonRequestBehavior.AllowGet,
Data = result
};
filterContext.HttpContext.Items["ErrorNumber"] = errorLog.Id.ToString("00000");
}
在例外情況有敏感信息,包括應作爲你展示我假設,這是在調試環境中運行,這是不是一個問題的錯誤畫面不但是泄露給消費者棧的細節。
此外,在非調試環境中,異常詳細信息可能會從響應中剝離出來,因此理想情況下應該形成基於該異常的Json格式的自定義消息,然後記錄原始堆棧的詳細信息,以便處理問題在晚些時候。
喜歡的東西下面應該讓你開始:
try
{
// do some work
}
catch (ExplicitException ex)
{
// Log the exception(ex);
var message = "Error Doing Work");
return Json(new { status = "Error", message });
}
}
您可以創建自己的自定義錯誤頁,並返回任何你喜歡的 –
但我不想失去的東西都顯示在這裏:標題,異常詳細信息,源錯誤,堆棧跟蹤等.... – sports