Asp.net mvc 处理MVC JSON控制器操作中的异常

Asp.net mvc 处理MVC JSON控制器操作中的异常,asp.net-mvc,Asp.net Mvc,我正在寻找在返回JSON结果时处理控制器错误的最佳方法 首先,如果控制器中出现未经处理的异常并返回JSON,那么最佳做法是什么?我想是400还是500?客户端检查状态并执行任何操作 我正在使用FilterAttribute和IEExceptionFilter,但无法调用OneException函数。我已将该属性应用于控制器操作 你知道为什么不打电话吗 [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherit

我正在寻找在返回JSON结果时处理控制器错误的最佳方法

首先,如果控制器中出现未经处理的异常并返回JSON,那么最佳做法是什么?我想是400还是500?客户端检查状态并执行任何操作

我正在使用FilterAttribute和IEExceptionFilter,但无法调用OneException函数。我已将该属性应用于控制器操作

你知道为什么不打电话吗

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = false, AllowMultiple = false)]
public sealed class AjaxHandleErrorAttribute : FilterAttribute, IExceptionFilter
{
    // This is never called !!!
    public void OnException(ExceptionContext filterContext)
    {
        if (filterContext == null)
        {
            throw new ArgumentNullException("filterContext");
        }

        if (filterContext.Exception != null 
            && !filterContext.ExceptionHandled)
        {
            ...
            filterContext.HttpContext.Response.StatusCode = 400;
            filterContext.HttpContext.Response.StatusDescription = "Error processing                 request";
            ...
        }
    }
}

public class MyController : Controller
{
    public MyController(IMyRepository repo)
    {
        ...
    }

    [AjaxHandleError]
    public ActionResult GetSomeJson(int anId)
    {
        throw new System.Exception();
    }
}

您应该使用该属性装饰控制器,或者在需要添加的global.asax.cs中装饰控制器

public static void RegisterGlobalFilters(GlobalFilterCollection filters) {
    filters.Add(new AjaxHandleErrorAttribute());
}

并且将调用您的OneException方法。

您应该使用该属性装饰控制器,或者在您需要添加的global.asax.cs中装饰控制器

public static void RegisterGlobalFilters(GlobalFilterCollection filters) {
    filters.Add(new AjaxHandleErrorAttribute());
}
将调用您的OneException方法