• Asp.net MVC3 异常全局过滤器处理



    1、建立异常全局过滤器处理机制,在Gloabal.asax.cs文件中,有如下代码块:

         public static void RegisterGlobalFilters(GlobalFilterCollection filters)
            {
                filters.Add(new HandleErrorAttribute());//主要就是这样一个类
            }

    2、查看源码可以看到:

     public class HandleErrorAttribute : FilterAttribute, IExceptionFilter
      {
        /// <summary>
        /// Called when an exception occurs.
        /// </summary>
        /// <param name="filterContext">The action-filter context.</param><exception cref="T:System.ArgumentNullException">The <paramref name="filterContext"/> parameter is null.</exception>
        public virtual void OnException(ExceptionContext filterContext);//看到这里我们就有办法进行自定义处理了
        /// <summary>
        /// Gets or sets the type of the exception.
        /// </summary>
        /// 
        /// <returns>
        /// The type of the exception.
        /// </returns>
        public Type ExceptionType { get; set; }
        /// <summary>
        /// Gets or sets the master view for displaying exception information.
        /// </summary>
        /// 
        /// <returns>
        /// The master view.
        /// </returns>
        public string Master { get; set; }
        /// <summary>
        /// Gets the unique identifier for this attribute.
        /// </summary>
        /// 
        /// <returns>
        /// The unique identifier for this attribute.
        /// </returns>
        public override object TypeId { get; }
        /// <summary>
        /// Gets or sets the page view for displaying exception information.
        /// </summary>
        /// 
        /// <returns>
        /// The page view.
        /// </returns>
        public string View { get; set; }
      }

    3、我们新建一个类,并且继承自HandleErrorAttribute,然后重写OnException方法

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using log4net;
    
    namespace MyEFTest.Models
    {
        public class MyHandlerExceptionAttribute : HandleErrorAttribute
        {
            public override void OnException(ExceptionContext filterContext)
            {
                base.OnException(filterContext);
                //记录错误信息
                ILog log = log4net.LogManager.GetLogger(typeof (MyHandlerExceptionAttribute).FullName);
                log.Error(filterContext.Exception.ToString());
                //让当前请求 跳转到首页,或者错误页面
                filterContext.HttpContext.Response.Redirect("/ErrorPage.htm");//ErrorPage是自定义的错误页面
            }
        }
    }

    4、这样就OK了,只要程序遇到异常,就会跳到错误页面。

  • 相关阅读:
    关于数组的练习题:
    函数(手写)
    常用函数和方法集
    用户输入年,月,日,计算该日是该年的第几天?需要考虑2月份的问题
    [备用] 你会在C#的类库中添加web service引用吗?
    [备用]权限设计方案、如何使用session、MVC如何使用模板、DropdownList、怎么添加Bootstrape框架、使用ASP.NET MVC 4 Bootstrap Layout Template(VS2012)
    [转:Pro ASP.NET MVC 5中的例子]使用MVC4,Ninject,EF,Moq,构建一个真实的应用电子商务SportsStore
    莫名其妙
    [备用] VS中生成报表
    [备用] 百度地图兴趣点抓取
  • 原文地址:https://www.cnblogs.com/tianboblog/p/3248120.html
Copyright © 2020-2023  润新知