asp.net-mvc - 发生异常时返回特殊的 JsonResult

标签 asp.net-mvc exception-handling

public JsonResult Menu() { // Exception }

我需要应用程序不将用户重定向到 404 页面,而是返回特殊的 JSON 结果,如 { "result":1 }。
请问有没有别的办法,不是try-catching。

最佳答案

您可以实现自己的 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;
    }
}

然后

[CustomHandleError]
public JsonResult Menu()
{
    throw new Exception();
}

我会推荐你​​download the MVC source code from CodePlex并检查 HandleErrorAttribute 的当前实现。它比我上面的粗略实现要微妙得多,您可能需要它的一些功能。

关于asp.net-mvc - 发生异常时返回特殊的 JsonResult,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4916176/

相关文章:

c# - EF 4.1 引用完整性错误

c# - DropDownListFor MVC : How to make it work

c# - 为什么我的 View 不使用 EditorTemplates 文件夹来执行创建操作?

asp.net-mvc - 关于 ASP.NET SPA(单页应用程序)的担忧

asp.net-mvc - 如何使用 ASP.NET MVC 3 Razor 渲染具有对象值的 HtmlAttributes?

python - 为什么在 Python 的 try/except 构造中使用 else?

c# - MVC MapPageRoute 和 ActionLink

C#: 'throw'是否退出当前函数?

silverlight - RIA 服务和故障契约(Contract)

javascript - 在 Javascript 中错误继续下一步?