我正在使用asp.net mvc
开发一个应用程序我发送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 :(得分:0)
一点建议
如果发生异常,您不应始终将response.StatusCode
设置为HttpStatusCode.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文章了解详情。