ASP.NET MVC Ajax错误处理

当jquery ajax调用动作时,如何处理控制器中引发的异常?

例如,我想要一个全局javascript代码,该代码将在ajax调用期间在任何类型的服务器异常上执行,如果在调试模式下则显示异常消息,或者仅显示普通错误消息。

在客户端,我将在ajax错误上调用一个函数。

在服务器端,是否需要编写自定义的动作过滤器?


慕码人2483693
浏览 682回答 3
3回答

临摹微笑

谷歌搜索后,我基于MVC操作筛选器编写了一个简单的异常处理:public class HandleExceptionAttribute : HandleErrorAttribute{&nbsp; &nbsp; public override void OnException(ExceptionContext filterContext)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; if (filterContext.HttpContext.Request.IsAjaxRequest() && filterContext.Exception != null)&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; filterContext.HttpContext.Response.StatusCode = (int)HttpStatusCode.InternalServerError;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; filterContext.Result = new JsonResult&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; JsonRequestBehavior = JsonRequestBehavior.AllowGet,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Data = new&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; filterContext.Exception.Message,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; filterContext.Exception.StackTrace&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; };&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; filterContext.ExceptionHandled = true;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; else&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; base.OnException(filterContext);&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }}并写在global.ascx中:&nbsp;public static void RegisterGlobalFilters(GlobalFilterCollection filters)&nbsp;{&nbsp; &nbsp; &nbsp; filters.Add(new HandleExceptionAttribute());&nbsp;}然后在布局或母版页上编写此脚本:<script type="text/javascript">&nbsp; &nbsp; &nbsp; $(document).ajaxError(function (e, jqxhr, settings, exception) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;e.stopPropagation();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (jqxhr != null)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;alert(jqxhr.responseText);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;});</script>最后,您应该打开自定义错误。然后享受它:)
打开App,查看更多内容
随时随地看视频慕课网APP