分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 运营维护

利用ASP.NET MVC Filter 处理网站异常

发布时间:2023-09-06 01:11责任编辑:沈小雨关键词:.NETMVC

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类当做定义。

记录一下!







利用ASP.NET MVC Filter 处理网站异常

原文地址:http://www.cnblogs.com/visibleisfalse/p/7521579.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved