如果发生异常,则返回特殊的JsonResult

Ser*_*lov 3 asp.net-mvc exception-handling

public JsonResult Menu() { // Exception }
Run Code Online (Sandbox Code Playgroud)

我需要应用程序不将用户重定向到404页面,但返回特殊的JSON结果,如{"result":1}.
我想知道,有没有其他解决方案,而不是尝试捕捉.

Run*_*une 6

你可以实现自己FilterAttribute类似的HandleErrorAttribute.

HandleErrorAttribute通常在发生错误时执行重定向,但您可以实现返回JsonResult的类似属性.像下面这样的东西会做:

public class CustomHandleErrorAttribute : HandleErrorAttribute
{
    public override void OnException(ExceptionContext filterContext)
    {
        if (filterContext == null)
        {
            throw new ArgumentNullException("filterContext");
        }

        filterContext.Result = new JsonResult
        {
            Data = new { result = 1 },
            JsonRequestBehavior = JsonRequestBehavior.AllowGet
        };
        filterContext.ExceptionHandled = true;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后

[CustomHandleError]
public JsonResult Menu()
{
    throw new Exception();
}
Run Code Online (Sandbox Code Playgroud)

我建议您从CodePlex下载MVC源代码并检查当前的实现HandleErrorAttribute.它比我上面的粗略实现更加微妙,你可能想要它的一些功能.