MVC 全局异常处理(适用多人操作)

自定义特性:

 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 }  

全局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 }  

 转  http://www.cnblogs.com/niunan/p/5736809.html

自定义过滤器,解决action方法名

回到筛选器public string ActionName { get; set; },其中ActionName是自定义Action的名称,比如在Create中直接[SupportFilter]那么ActionName取得就是Create,这将和你的数据库操作码进行对应的,那么我的方法是CreateAttr,那么要使用Create这个操作码,怎么办
那么就是

[SupportFilter(ActionName = "Create")]
public ActionResult CreateAttr()

 那么类似的写法

[SupportFilter(ActionName = "Index")]
public JsonResult GetList()
原文地址:https://www.cnblogs.com/moy-1313133/p/7053612.html