2017-10-16 55 views
0

如果有在ASP.NET MVC未處理的服務器錯誤500返回JSON,服務器返回一個HTML頁面是這樣的:當未處理的錯誤500拋出異常

enter image description here

問題:是它可能配置應用程序,以便它返回一個JSON而不是上述HTML的相同信息?

如:

{ 
     Title:'Maximum request length exceeded', 
     Description:'An unhandled eception .....', 
     ...etc 
    } 
+0

您可以創建自己的自定義錯誤頁,並返回任何你喜歡的 –

+0

但我不想失去的東西都顯示在這裏:標題,異常詳細信息,源錯誤,堆棧跟蹤等.... – sports

回答

0

您需要捕獲錯誤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"); 
     } 
0

在例外情況有敏感信息,包括應作爲你展示我假設,這是在調試環境中運行,這是不是一個問題的錯誤畫面不但是泄露給消費者棧的細節。

此外,在非調試環境中,異常詳細信息可能會從響應中剝離出來,因此理想情況下應該形成基於該異常的Json格式的自定義消息,然後記錄原始堆棧的詳細信息,以便處理問題在晚些時候。

喜歡的東西下面應該讓你開始:

try 
    { 
     // do some work 
    } 
    catch (ExplicitException ex) 
    { 
     // Log the exception(ex); 

     var message = "Error Doing Work"); 
     return Json(new { status = "Error", message }); 
    } 
} 
相關問題