zoukankan      html  css  js  c++  java
  • 利用ASP.NET MVC Filter 处理网站异常

    1,Filter(筛选器)是基于AOP(面向方面编程)的设计,他的好处什么的就不是本文要说的,如果要了解关于filter的相关知识请参照,大神说的够清楚了:http://www.cnblogs.com/willick/p/3331520.html

    这里主要记录一下我自己的利用ASP.NET MVC Filter 处理网站异常过程:

    2,首先添加 一个自定义的filter类:

    using System;
    using System.Collections.Generic;
    using System.Collections.Specialized;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    
    namespace Web.Infrastructure
    {
        //错误filter
        //所有的action出现了错误,都会跳到这个类,然后记录日志
        //
        public class ErrorExceptionAttribute : FilterAttribute, IExceptionFilter
        {
            public void OnException(ExceptionContext filterContext)
            {
                if (!filterContext.ExceptionHandled)
                {
                    string ControllerName = string.Format("{0}Controller", filterContext.RouteData.Values["controller"] as string);
                    string ActionName = filterContext.RouteData.Values["action"] as string;
    
    
                    NameValueCollection gets = filterContext.HttpContext.Request.QueryString;
                    List<string> listget = new List<string>();
                    foreach (string key in gets)
                    {
                        listget.Add(string.Format("{0}={1}", key, gets[key]));
                    }
    
                    NameValueCollection posts = filterContext.HttpContext.Request.Form;
    
                    List<string> listpost = new List<string>();
                    if (filterContext.HttpContext.Request.Files.Count <= 0)
                    {
                        foreach (string key in posts)
                        {
                            listpost.Add(string.Format("{0}={1}", key, posts[key]));
                        }
                    }
                    ControllerName = ControllerName.Replace("Controller", "");
                    string ErrorMsg = string.Format("错误url: {0}/{1}?{2} ||,post参数:{3} || 错误msg:{4}",
                                      ControllerName, ActionName, string.Join("&", listget.ToArray()), string.Join("&", listpost.ToArray()),filterContext.Exception.Message.ToString());
    
                    Common.CommonMethed.WriteLog(ErrorMsg);//用Log4net记录日志
    
    
    
                   // filterContext.Result = new RedirectResult("404.html"); //这里不进行跳转,直接webconfig设置404页面,因为404页面在webform项目上
                    filterContext.ExceptionHandled = true;
    
    
    
                }
            }
        }
    }

    3,然后将这个filter注册为全局的filter,这样你网站上所有的控制器下的所有action出错都可以跳到自定义的那个filter类进行处理,就不用为每个action添加attribute。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using Web.Infrastructure;
    
    namespace Web.App_Start
    {
        public class FilterConfig
        {
            public static void RegisterGlobalFilters(GlobalFilterCollection filters)
            {
                filters.Add(new ErrorExceptionAttribute());//注册为全局filter
            }
        } 
    }
    4,FilterConfig 在App_Start文件夹中,如果发现App_Start文件夹下无FilterConfig.cs类,则需自己手动创建,然后在Global文件下的下面方法中注册FilterConfig.cs类

            protected void Application_Start()
            {
                AreaRegistration.RegisterAllAreas();
                RouteConfig.RegisterRoutes(RouteTable.Routes);
                FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
                //System.Data.Entity.Database.SetInitializer<Service.NewHouseContext_HB>(null);
                AtuofacConfig.AutoFacInit();
                 
                 
            }

    5,故意在某个action当中抛出一个异常,可以看看效果:

    这里我是将错误记录在了txt,当然也可以其他方式收集错误。

    经过测试,除了action里面的错误能够捕捉到之外,view视图里面的报错也能够跳到自定义的filter类里面去处理。

    另外,当发生错误时,除了记日子,也可以跳转到一个404友好页面,这个可以在自定义的filter类当做定义。

    记录一下!







  • 相关阅读:
    Django学习(文件上传与下载)
    Django学习(实现登录功能)
    Django学习(实现注册功能)
    Django学习(环境配置)
    Android-Universal-Image-Loader异步加载图片框架学习
    Android自定义控件_View的绘制流程
    Android自定义控件_Canvas分析
    属性方法介绍——View(1)
    Android平滑移动——Scroller类研究
    记录一个前端二级导航栏的淡入淡出效果
  • 原文地址:https://www.cnblogs.com/visibleisfalse/p/7521579.html
Copyright © 2011-2022 走看看