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

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. namespace Niunan.MVCShop.Code
  7. {
  8. public class MyExecptionAttribute : HandleErrorAttribute
  9. {
  10. public static Queue<Exception> ExceptionQueue = new Queue<Exception>();//创建队列.
  11. public override void OnException(ExceptionContext filterContext)
  12. {
  13. //将异常信息入队.
  14. ExceptionQueue.Enqueue(filterContext.Exception);//将异常信息入队.
  15. //filterContext.HttpContext.Response.Redirect("/error.html");
  16. base.OnException(filterContext);
  17. }
  18. }
  19. }

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

ASP.NET MVC中全局异常处理的更多相关文章

  1. ASP.NET MVC中注册Global.asax的Application_Error事件处理全局异常

    在ASP.NET MVC中,通过应用程序生命周期中的Application_Error事件可以捕获到网站引发的所有未处理异常.本文作为学习笔记,记录了使用Global.asax文件的Applicati ...

  2. [翻译] ASP.NET WebAPI 中的异常处理

    原文链接:https://docs.microsoft.com/en-us/aspnet/web-api/overview/error-handling/exception-handling 本文介绍 ...

  3. mvc自定义全局异常处理

    异常信息处理是任何网站必不可少的一个环节,怎么有效显示,记录,传递异常信息又成为重中之重的问题.本篇将基于上篇介绍的html2cancas截图功能,实现mvc自定义全局异常处理.先看一下最终实现效果: ...

  4. ASP.NET MVC中的错误处理

    ASP.NET MVC中的错误的错误处理跨越了两个主要领域:程序异常和路由异常的处理.前者是关于在控制器和视图中捕获错误的;而后者更多是有关重定向和HTTP错误的. 1.在WebConfig中把过滤器 ...

  5. 在ASP.NET MVC中实现基于URL的权限控制

    本示例演示了在ASP.NET MVC中进行基于URL的权限控制,由于是基于URL进行控制的,所以只能精确到页.这种权限控制的优点是可以在已有的项目上改动极少的代码来增加权限控制功能,和项目本身的耦合度 ...

  6. asp.net MVC中的AppendTrailingSlash以及LowercaseUrls

    asp.net MVC中的AppendTrailingSlash以及LowercaseUrls asp.net MVC是一个具有极大扩展性的框架,可以在从Url请求开始直到最终的html的渲染之间进行 ...

  7. Asp.net mvc 中Action 方法的执行(二)

    [toc] 前面介绍了 Action 执行过程中的几个基本的组件,这里介绍 Action 方法的参数绑定. 数据来源 为 Action 方法提供参数绑定的原始数据来源于当前的 Http 请求,可能包含 ...

  8. Asp.net mvc 中的路由

    在 Asp.net mvc 中,来自客户端的请求总是针对某个 Controller 中的 Action 方法,因此,必须采用某种机制从请求的 URl 中解析出对应的 Controller 和 Acti ...

  9. 在ASP.NET MVC中使用Castle Windsor

    平常用Inject比较多,今天接触到了Castle Windsor.本篇就来体验其在ASP.NET MVC中的应用过程. Visual Studio 2012创建一个ASP.NET MVC 4网站. ...

随机推荐

  1. java 数组声明方法

    //数组 public class Test16{ public static void main(String args[]){ //声明一: int [] x; x = new int[3];// ...

  2. Tomcat服务器版本号泄露-低危漏洞修复

    一.问题描述Tomcat报错页面泄漏Apache Tomcat/7.0.52相关版本号信息,是攻击者攻击的途径之一.因此实际当中建议去掉版本号信息.二.解决办法 1.进入到tomcat/lib目录下, ...

  3. CAP理论中, P(partition tolerance, 分区容错性)的合理解释

    在CAP理论中, 对partition tolerance分区容错性的解释一般指的是分布式网络中部分网络不可用时, 系统依然正常对外提供服务, 而传统的系统设计中往往将这个放在最后一位. 这篇文章对这 ...

  4. Arduino和C51开发光敏传感器

    技术:51单片机.Arduino.光敏传感器.PCF8591.AD/DA转换   概述 本文介绍了如何接收传感器的模拟信号和如何使用PCF8591 AD/DA转换模块对光敏传感器的模拟信号进行转换.讲 ...

  5. 有关windows Gateway Ipsec 和NAT 兼容性问题

    1.简单通信拓扑: 将Windows 平台 作为一个网关,同一时候开启IPsec 和NAT来支持private和public的通信. 注意:IPSEC Gateway  和 Client1 Ipsec ...

  6. javascript自动填写表单小技巧

    javascript自动填写表单小技巧 在平时开发过程中,或者在访问某些站点,经常要频繁地填写一大堆表单时,我们可以利用javascript,写一段脚本,预先把要填的信息准备好,然后模拟点击按钮的动作 ...

  7. 【laravel5.4】安装指定版本的predis 和 处理laravel5.*安装使用Redis以及解决Class 'Predis\Client' not found和Fatal error: Non-static method Redis::set() cannot be called statically错误

    (predis下载地址:https://packagist.org/packages/predis/predis) 1.cmoposer 命令行: php composer require predi ...

  8. 大家所说的full-stack框架到底是指什么?

    轻量级框架: 整合层 guice ORM层 nutz, guzz 表示层             -- None --             JSF             Spring MVC   ...

  9. Windows系统使用vbs脚本或bat脚本强制杀死指定所有进程 vbs实现循环持续写入内容到vbs打开开的记事本 使用vbs、bat添加windows计划任务 使用cmd schtasks命令添加windows计划任务

    以下脚本windows7下成功运行过,脚本也可以windows计划任务程序一起组合使用 新建一个记事本文档粘贴下面代码后将新建的记事本文档重命名下面对应的脚本名就能使用了: 添加windows计划任务 ...

  10. 代码管理(五)git 删除分支

    1.删除远程分支 在远程下面,选择需要删除的分支,右击,选择删除 2.  删除不存在远程对应分支的本地分支 在远程上建立了一个分支feature,后来leader觉得不合理,就把远程feature分支 ...