首页 新闻 会员 周边

关于MVC中使用AJAX的异常捕获

0
悬赏园豆:20 [已解决问题] 解决于 2016-03-05 11:52

MVC中怎么去捕获通过异步处理业务逻辑时出现的异常呢,各位大神有没有好的方法呢~

 

比如说:

我自己定义了一个错误异常处理器,捕获到错误时,让他跳转到错误页面.....

  public class MyExceptionFilterAttribute : HandleErrorAttribute
    {
        public override void OnException(ExceptionContext filterContext)
        {
            base.OnException(filterContext);
            filterContext.HttpContext.Response.Redirect("~/ErrorPage.html");
        }
    }


我在点击按钮的时候,向Home控制器下的GetTime()发送异步请求,获取当前时间;然后我故意在GetTime中抛出一个异常,请问怎么能捕获这个异常呢?

 

这个页面源码:

@{
    ViewBag.Title = "Index";
}
<script src="~/Scripts/jquery-1.8.2.js"></script>
<script>
    window.onload = function () {
        $("button").click(function () {
            $.get("Home/GetTime", {}, function (data) {
                alert(data);
            });
        });
    }
</script>
<h2>Index</h2>


<button>点击发送异步</button>

 

 

Home控制器

 public class HomeController : Controller
    {
        //
        // GET: /Home/

        public ActionResult Index()
        {
          
            return View();
        }

        public ActionResult GetTime()
        {
            throw new Exception();
            return Content(DateTime .Now.ToString());
        }

    }

求大神赐教

蔡先森的主页 蔡先森 | 初学一级 | 园豆:181
提问于:2016-03-05 00:42
< >
分享
最佳答案
1

要在MVC注册拦截器,拦截异常信息,然后输出错误信息,在前端用AJAX全局注册监听

对应代码:

找到/App_Start/FilterConfig.cs

加入 filters.Add(new AjaxExceptionFilterAttribute()); // AjaxExceptionFilterAttribute 自己写

 

js:

$.ajaxSetup({

    error: function error(ex, extype)

    {

        ajaxOnFailure(ex, extype);

        return false;

    }

});

收获园豆:10
Y2zz | 菜鸟二级 |园豆:393 | 2016-03-05 09:20

谢谢  

蔡先森 | 园豆:181 (初学一级) | 2016-03-05 11:52
其他回答(1)
0

ajax请求如果需要跳转,请在客户端处理。服务器响应一个对象{操作名称: "跳转", 数据: "要跳转的URL"}。

对于你故意抛出的异常,在ajax的error处理函数中是可以捕获到的。

收获园豆:10
幻天芒 | 园豆:37175 (高人七级) | 2016-03-05 08:39

但是它会直接把错误页面ErrorPage.html 源码直接alert出来,而不是跳转页面。似乎是将错误页面作为响应内容返回给客户端了。如果只能在客户端处理的,那肯定要在它请求的方法GetTime中try catch捕获这个异常,然后再返回要跳转的页面给客户端,让客户端用js跳转,对吗?那要是项目中过多的使用异步的话,岂不是都要这样弄……

支持(0) 反对(0) 蔡先森 | 园豆:181 (初学一级) | 2016-03-05 09:13

@哆啦的哆啦多: 楼下已经告诉你如何做了。就是那样。

支持(0) 反对(0) 幻天芒 | 园豆:37175 (高人七级) | 2016-03-05 09:52

@幻天芒: 嗯嗯  谢谢

支持(0) 反对(0) 蔡先森 | 园豆:181 (初学一级) | 2016-03-05 11:47
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册