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()