我尝试使用全局属性
编辑:更新了最终解决方案
public class HandleAndLogErrorAttribute : HandleErrorAttribute
{
private static readonly ILog log = Log<HandleAndLogErrorAttribute>.Create();
public override void OnException(ExceptionContext filterContext)
{
if (!filterContext.ExceptionHandled)
{
log.Error("Unhandled exception", filterContext.Exception);
if (filterContext.HttpContext.Request.IsAjaxRequest())
{
filterContext.Result = new { Message = filterContext.Exception.Message, StackTrace = filterContext.Exception.StackTrace }.AsJson();
filterContext.ExceptionHandled = true;
filterContext.HttpContext.Response.Clear();
filterContext.HttpContext.Response.StatusCode = 500;
filterContext.HttpContext.Response.TrySkipIisCustomErrors = true;
}
else
base.OnException(filterContext);
}
}
}
问题是MVC将忽略Result并呈现错误页面,如果我设置filterContext.ExceptionHandled = true;
它将不会忽略Result但它将返回代码200而不是500,所以我的客户端上的通用错误处理程序不会检测错误。我不能返回200因为那时我的调用成功方法将会发生意外行为。
有什么想法吗?