我怎样才能在ASP.NET MVC的JSON格式返回500错误?

当ASP.NET MVC抛出一个异常时,它返回一个响应类型为text/html的500错误 - 当然这是JSON无效。

我想回应一个期待JSON的Ajax请求,并发出一个我可以接收并向用户显示的错误。

  • 是否有可能返回JSON与HTTP状态码500?

  • 当问题是缺少参数时,在控制器甚至被调用之前发生500错误 - 所以控制器解决方案可能无法工作。 例如,在通常返回一个JsonResult的Action的调用中留下一个必需的参数,ASP.NET MVC会将其发送回客户端:

  • '/'应用程序中的服务器错误。 参数字典包含用于方法'System.Web.Mvc.JsonResult EditUser(Int32,System.String,System.String,System.String,System。)的非空类型'System.Int32'的参数'id'的空条目。 String,System.String,System.String,System.String,System.String)'in'bhh'。 可选参数必须是引用类型,可为空类型,或者声明为可选参数。 参数名称:参数

    我正在使用jQuery; 有没有更好的方法来处理这个问题?


    您可以使用自定义错误处理程序过滤器:

    public class AjaxErrorHandler : FilterAttribute, IExceptionFilter
    {
        public void OnException(ExceptionContext filterContext)
        {
            if (filterContext.HttpContext.Request.IsAjaxRequest())
            {
                filterContext.ExceptionHandled = true;
                filterContext.Result = new JsonResult
                {
                    Data = new { errorMessage = "some error message" }
                };
            }
        }
    }
    

    然后,通过Ajax调整您正在调用的控制器/操作,甚至注册为全局过滤器。

    然后,在执行Ajax请求时,您可以测试是否存在错误属性:

    $.getJSON('/foo', function(result) {
        if (result.errorMessage) {
            // Something went wrong on the server
        } else {
            // Process as normally
        }
    });
    
    链接地址: http://www.djcxy.com/p/39203.html

    上一篇: How can I return 500 error in JSON format in ASP.NET MVC?

    下一篇: What are the returned parameters in the jQuery ajax success option?