2017-02-26 52 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文章欲知更多详情,如果感兴趣。