2017-02-26 49 views
0

我開發與asp.net的MVC我怎麼能分開的web.config httpErrors與HttpResponseMessage HttpStatusCode

我發送Ajax POST請求的應用程序。

當運行過程中發生錯誤時,我會得到500個狀態代碼。

這種情況是正確的,但web.config文件中的代碼重定向到錯誤頁面。

這是我的代碼

public class ErrorHandler : FilterAttribute, IExceptionFilter 
    { 
     public void OnException(ExceptionContext filterContext) 
     { 
      var response = filterContext.RequestContext.HttpContext.Response; 

      filterContext.ExceptionHandled = true; 

      response.StatusCode = (int)HttpStatusCode.InternalServerError; 

      filterContext.Result = new JsonResult 
      { 
       Data = new { 

        success = false 
       }, 

       JsonRequestBehavior = JsonRequestBehavior.AllowGet 
      }; 
     } 
    } 

的Web.Config

<httpErrors existingResponse="Replace" defaultResponseMode="ExecuteURL" errorMode="Custom"> 
     <remove statusCode="500"/> 
     <error statusCode="500" path="/common/error" responseMode="Redirect"/> 
    </httpErrors> 

回答

0

一個小建議

你不應該設置response.StatusCodeHttpStatusCode.InternalServerError一切的時候,有一個例外。嘗試和更具體,所以你並不總是返回500.如果你返回一個不同的,更具體的錯誤代碼,那麼根據你的web.config重定向將不會被髮送。例如,如果錯誤是因爲AJAX請求的用戶與特定的ID和用戶不存在,則返回錯誤代碼404。


我們解決您的問題,你可以這樣做:

if (filterContext.HttpContext.Request.IsAjaxRequest()) 
{ 
    CallbackException error = new CallbackException(); 
    error.message = errorMessage; 
    error.isCallbackError = true; 
    error.stackTrace = stackTrace; 

    JSONSerializer Serializer = new JSONSerializer(); 
    string result = Serializer.Serialize(error); 

    var response = filterContext.RequestContext.HttpContext.Response; 
    response.ContentType = ControlResources.STR_JsonContentType; 

    response.TrySkipIisCustomErrors = true; 
    response.StatusCode = 500; 
    response.Write(Result); 
    HttpContext.Current.ApplicationInstance.CompleteRequest(); 
} 
else 
{ 
    // The code in your answer goes here 
} 

請參閱this文章欲知更多詳情,如果感興趣。