ASP.NET MVC4 异常拦截

ASP.NET MVC4 程序发生异常时,通过拦截Action的异常,重写ActionFilterAttribute 的方法OnActionExecuted实现。

具体实现代码如下:

    /// <summary>

    /// 拦截Action的异常

    /// </summary>

    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false)]

    public class ExceFilterAttribute : ActionFilterAttribute

    {

        public override void OnActionExecuted(ActionExecutedContext filterContext)

        {

            if (filterContext.Exception != null)

            {

                object[] attrs = filterContext.ActionDescriptor.GetCustomAttributes(typeof(LigerUIExceptionResultAttribute), true);

                if (attrs.Length == 1)//判断是否属于LigerUIResult的Action

                {

                    string msgTmp= "<b>异常消息:  </b>{0}</p><b>触发Action:  </b>{1}</p><b>异常类型:  </b>{2}";

                    var excResult = new JsonResult();

                    excResult.Data = AjaxResult.Error(string.Format(msgTmp,

                                filterContext.Exception.GetBaseException().Message,

                                filterContext.ActionDescriptor.ActionName,

                                filterContext.Exception.GetBaseException().GetType().ToString()));

                    LogHelper.WriteLog("系统错误:" + excResult.Data);

                    filterContext.Result = excResult;

                }

                else

                {

                    filterContext.Controller.ViewData["ErrorMessage"] = String.Format(@"<b>异常消息: {0}</br><b>触发Action:  </p>{1}</br><b>异常类型:  </b>{2}",

                        filterContext.Exception.GetBaseException().Message,

                        filterContext.ActionDescriptor.ActionName,

                        filterContext.Exception.GetBaseException().GetType().ToString());

                    LogHelper.WriteLog("系统错误:" + filterContext.Controller.ViewData["ErrorMessage"].ToString ());

                    filterContext.Result = new ViewResult()

                   {

                       ViewName = "Error",

                       ViewData = filterContext.Controller.ViewData,

                   };



                }

                filterContext.ExceptionHandled = true;

            }

        }

    }

 

你可能感兴趣的:(asp.net)