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()); } }
求大神赐教
要在MVC注册拦截器,拦截异常信息,然后输出错误信息,在前端用AJAX全局注册监听
对应代码:
找到/App_Start/FilterConfig.cs
加入 filters.Add(new AjaxExceptionFilterAttribute()); // AjaxExceptionFilterAttribute 自己写
js:
$.ajaxSetup({
error: function error(ex, extype)
{
ajaxOnFailure(ex, extype);
return false;
}
});
谢谢
ajax请求如果需要跳转,请在客户端处理。服务器响应一个对象{操作名称: "跳转", 数据: "要跳转的URL"}。
对于你故意抛出的异常,在ajax的error处理函数中是可以捕获到的。
但是它会直接把错误页面ErrorPage.html 源码直接alert出来,而不是跳转页面。似乎是将错误页面作为响应内容返回给客户端了。如果只能在客户端处理的,那肯定要在它请求的方法GetTime中try catch捕获这个异常,然后再返回要跳转的页面给客户端,让客户端用js跳转,对吗?那要是项目中过多的使用异步的话,岂不是都要这样弄……
@哆啦的哆啦多: 楼下已经告诉你如何做了。就是那样。
@幻天芒: 嗯嗯 谢谢