zoukankan      html  css  js  c++  java
  • 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.     }  
      63. }  
  • 相关阅读:
    《认知突围》摘抄
    《java多线程编程核心技术》----ThreadLocal
    java有必要记录的东西
    spring源码几个servlet功能的介绍
    基于openapi3.0的yaml文件生成java代码的一次实践
    Android攻城狮 调试
    Android攻城狮 http协议
    Android攻城狮 Android中更新UI的几种方式
    Android攻城狮 Handler与子线程
    Android攻城狮Handler简介
  • 原文地址:https://www.cnblogs.com/niunan/p/5736809.html
Copyright © 2011-2022 走看看