ASP.NET MVC中全局异常处理

以前不知道从哪里找到的处理全局异常的,觉得蛮好用就记下来了。

1, 建立MyExecptionAttribute.cs类,写入如下代码:
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Web;  
  5. using System.Web.Mvc;  
  6.   
  7. namespace Niunan.MVCShop.Code  
  8. {  
  9.     public class MyExecptionAttribute : HandleErrorAttribute  
  10.     {  
  11.         public static Queue<Exception> ExceptionQueue = new Queue<Exception>();//创建队列.  
  12.   
  13.         public override void OnException(ExceptionContext filterContext)  
  14.         {  
  15.             //将异常信息入队.  
  16.             ExceptionQueue.Enqueue(filterContext.Exception);//将异常信息入队.  
  17.             //filterContext.HttpContext.Response.Redirect("/error.html");  
  18.             base.OnException(filterContext);  
  19.         }  
  20.     }  
  21. }  


2,在Global文件代码如下:
  1. using Niunan.Utility;  
  2. using System;  
  3. using System.Collections.Generic;  
  4. using System.Linq;  
  5. using System.Threading;  
  6. using System.Web;  
  7. using System.Web.Http;  
  8. using System.Web.Mvc;  
  9. using System.Web.Routing;  
  10.   
  11. namespace Niunan.MVCShop  
  12. {  
  13.     // 注意: 有关启用 IIS6 或 IIS7 经典模式的说明,  
  14.     // 请访问 http://go.microsoft.com/?LinkId=9394801  
  15.     public class MvcApplication : System.Web.HttpApplication  
  16.     {  
  17.         protected void Application_Start()  
  18.         {  
  19.             AreaRegistration.RegisterAllAreas();  
  20.   
  21.             WebApiConfig.Register(GlobalConfiguration.Configuration);   
  22.             RouteConfig.RegisterRoutes(RouteTable.Routes);  
  23.   
  24.             GlobalFilters.Filters.Add(new Code.MyExecptionAttribute()); //NET4建立的项目的话则是在APP_Stars/ConfigFilter.cs中  
  25.   
  26.             //通过线程开启一个线程,然后不停的从队列中或数据  
  27.             string filePath = Server.MapPath("/Log/");  
  28.             ThreadPool.QueueUserWorkItem(o =>  
  29.             {  
  30.                 while (true)  
  31.                 {  
  32.                     try  
  33.                     {  
  34.                         if (Code.MyExecptionAttribute.ExceptionQueue.Count > 0)  
  35.                         {  
  36.                             Exception ex = Code.MyExecptionAttribute.ExceptionQueue.Dequeue();//从队列中拿出数据  
  37.   
  38.                             if (ex != null)  
  39.   
  40.                             {  
  41.                                 Tool.TxtLog(ex.ToString(), filePath + DateTime.Now.ToString("yyyyMMdd")+".txt");  
  42.                             }  
  43.                             else  
  44.                             {  
  45.                                 Thread.Sleep(30);  
  46.                             }  
  47.                         }  
  48.                         else  
  49.                         {  
  50.                             Thread.Sleep(30);//避免了CPU空转。  
  51.                         }  
  52.                     }  
  53.                     catch (Exception ex)  
  54.                     {  
  55.                         Code.MyExecptionAttribute.ExceptionQueue.Enqueue(ex);  
  56.   
  57.                     }  
  58.                 }  
  59.   
  60.             }, filePath);  
  61.         }  
  62.     }  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值