博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
asp.net mvc中配置全局异常过滤器
阅读量:5294 次
发布时间:2019-06-14

本文共 4056 字,大约阅读时间需要 13 分钟。

第一步:定义一个类:MyHandlerErrorAttribute 继承HandleErrorAttribute

重写OnException方法

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.Mvc;using System.IO;using System.Text;namespace TimeRecord.Models{    public class MyHandlerErrorAttribute : HandleErrorAttribute    {        public override void OnException(ExceptionContext filterContext)        {         //1.获取异常对象            Exception ex = filterContext.Exception;            //2.获取请求的类名和方法名            string strController = filterContext.RouteData.Values["controller"].ToString();            string strAction = filterContext.RouteData.Values["action"].ToString();            //3.记录异常日志            string errMsg = String.Format("控制器:{0};Action:{1};异常信息:{2};", strController, strAction, ex.ToString());            WtLog(errMsg);            //重定向到友好页面            filterContext.Result = new RedirectResult("/TimeRecord/error");            //标记异常已经处理完毕            filterContext.ExceptionHandled = true;            base.OnException(filterContext);        }        public void WtLog(string message)               {          string path = AppDomain.CurrentDomain.BaseDirectory + "\\log\\log.txt";                      using (StreamWriter sw = new StreamWriter(path,true,Encoding.Default  ))          {              sw.Flush();//清除当前编写器的所有缓冲区,并将所有缓冲的数据写入基础流。              sw.WriteLine("时间:" + DateTime.Now);              sw.WriteLine("内容:" + message);              sw.WriteLine("=======");          }                }    }}

第二步 在 filterConfig中添加自定义的MyHandlerErrorAttribute

using System.Web;using System.Web.Mvc;using TimeRecord.Models;namespace TimeRecord{    public class FilterConfig    {        public static void RegisterGlobalFilters(GlobalFilterCollection filters)        {            filters.Add(new HandleErrorAttribute());            filters.Add(new MyHandlerErrorAttribute());        }    }}

第三步,在Web.config中配置system.web节点下

第四步 测试

在控制器中创造一个异常

#region 全部动态      [HttpGet]       public ActionResult UserTimeRecord()     {         int a = 0;         int b = 1 / a;                           }           #endregion

运行 可以看到log文件夹会生成日志文件

=======时间:2019/7/31 10:08:17内容:控制器:TimeRecord;Action:UserTimeRecord;异常信息:System.DivideByZeroException: 尝试除以零。   在 TimeRecord.Controllers.TimeRecordController.UserTimeRecord() 位置 c:\Users\Administrator\Desktop\工作台\study\TimeRecord\TimeRecord\Controllers\TimeRecordController.cs:行号 198   在 lambda_method(Closure , ControllerBase , Object[] )   在 System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters)   在 System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)   在 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)   在 System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass42.
b__41() 在 System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass8`1.
b__7(IAsyncResult _) 在 System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End() 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass37.<>c__DisplayClass39.
b__33() 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass4f.
b__49() 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass37.
b__36(IAsyncResult asyncResult) 在 System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End() 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult) 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass25.<>c__DisplayClass2a.
b__20() 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass25.
b__22(IAsyncResult asyncResult);=======

  

转载于:https://www.cnblogs.com/Vinkong/p/11274633.html

你可能感兴趣的文章
用HttpCombiner来减少js和css的请问次数
查看>>
FUSE-用户空间文件系统
查看>>
将tiff文件转化为jpg文件并保存
查看>>
ubuntu 16.04 开机脚本
查看>>
 VS2012 C#调用C++ dll
查看>>
TCL:表格(xls)中写入数据
查看>>
SQL SERVER 2005中如何获取日期(一个月的最后一日、一年的第一日等等)
查看>>
django 学习笔记(转)
查看>>
控制台程序秒变Windows服务(Topshelf)
查看>>
字节流与字符流的区别详解
查看>>
20141026--娱乐-箱子
查看>>
自定义分页
查看>>
Oracle事务
查看>>
任意输入10个int类型数据,把这10个数据首先按照排序输出,挑出这些数据里面的素数...
查看>>
String类中的equals方法总结(转载)
查看>>
图片问题
查看>>
bash使用规则
查看>>
AVL数
查看>>
第二章练习
查看>>
ajax2.0
查看>>