MVC3在错误而不是HTML上返回JSON

时间:2012-10-03 09:15:50

标签: json asp.net-mvc-3 exception-handling

我尝试使用全局属性

编辑:更新了最终解决方案

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因为那时我的调用成功方法将会发生意外行为。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

请看这个例子:ASP.NET MVC Ajax Error handling。我想,这就是你要找的东西。您可以在OnException

中设置任何代码