MVC 全局异常处理及禁用显示头

Posted 小呀么小二郎

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MVC 全局异常处理及禁用显示头相关的知识,希望对你有一定的参考价值。

MVC网站的global.asax中的Application_Start方法里,有这样一段代码:

 1    public class MvcApplication : System.Web.HttpApplication
 2     {
 3         protected void Application_Start()
 4         {
 5             AreaRegistration.RegisterAllAreas();
 6             FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
 7             RouteConfig.RegisterRoutes(RouteTable.Routes);
 8             BundleConfig.RegisterBundles(BundleTable.Bundles);
 9         }
10     }

一、禁用显示头信息:

在global.asax中的Application_Start方法里添加如下代码:

MvcHandler.DisableMvcResponseHeader = true;

另外添加如下方法:

      /// <summary>
        /// 移除响应头部信息
        /// </summary>
        protected void Application_PreSendRequestHeaders()
        {
            Response.Headers.Remove("Server");           //Remove Server Header   
            Response.Headers.Remove("X-AspNet-Version"); //Remove X-AspNet-Version Header
        }

 

二、添加全局异常处理:

1、定义异常处理类,继承HandleErrorAttribute:

public class ExceptionLogAttribute:HandleErrorAttribute
    {
        /// <summary>
        /// 触发异常时调用的方法
        /// </summary>
        /// <param name="filterContext"></param>
        public override void OnException(ExceptionContext filterContext)
        {
            string message = string.Format("消息类型:{0}<br>消息内容:{1}<br>引发异常的方法:{2}<br>引发异常的对象:{3}。"
                , filterContext.Exception.GetType().Name
                , filterContext.Exception.Message
                , filterContext.Exception.TargetSite
                , filterContext.Exception.Source);
            //登录用户
            var loginUserId = Guid.Empty;
            var loginInfo = filterContext.HttpContext.Session["userMdl"] as ViewModel.t_User_VModel;
            if (loginInfo != null)
            {
                loginUserId = loginInfo.UserId;
            }

            var model=new JiaSoftOTOSystem.ViewModel.t_ExceptionLog_VModel{
                ExceptionId=Guid.NewGuid(),
                Title = filterContext.RouteData.GetRequiredString("controller")+"/"+filterContext.RouteData.GetRequiredString("action"),
                Messge = message,
                CreationTime=DateTime.Now,
                CreatedByUserId = loginUserId
            };

            //将 ex 错误对象记录到日志
            new JiaSoftOTOSystem.BLL.t_ExceptionLog_BLL().Add(model);

            base.OnException(filterContext);
        }
    }

 

2、然后在global.asax中的Application_Start方法里注册事件 FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters)中添加全局异常处理类的注册:

 public class FilterConfig
    {
        public static void RegisterGlobalFilters(GlobalFilterCollection filters)
        {
            // 自定义异常类,继承自HandleError,将异常信息写入日志
            filters.Add(new ExceptionLogAttribute());
            //默认的异常记录类
            filters.Add(new HandleErrorAttribute());
        }
    }

全局异常处理添加完毕。

 

以上是关于MVC 全局异常处理及禁用显示头的主要内容,如果未能解决你的问题,请参考以下文章

Spring MVC全局异常后返回JSON异常数据

如何通过在 Spring MVC 中返回自定义错误页面来全局处理 404 异常?

ASP.NET MVC Ajax 错误处理

ASP.NET MVC中注册Global.asax的Application_Error事件处理全局异常

springboot 全局异常处理

asp.net mvc全局错误处理