asp.net捕获全局未处理异常的几种方法
通过HttpModule来捕获未处理的异常【推荐】
首先需要定义一个HttpModule,并监听未处理异常,代码如下:
public void Init(HttpApplication context)
{
context.Error += new EventHandler(context_Error);
}
public void context_Error(object sender, EventArgs e)
{
//此处处理异常
HttpContext ctx = HttpContext.Current;
HttpResponse response = ctx.Response;
HttpRequest request = ctx.Request;
//获取到HttpUnhandledException异常,这个异常包含一个实际出现的异常
Exception ex = ctx.Server.GetLastError();
//实际发生的异常
Exception iex = ex.InnerException;
response.Write("来自ErrorModule的错误处理<br />");
response.Write(iex.Message);
ctx.Server.ClearError();
}
然后在web.config中加入配置信息:
<httpModules>
<add name="errorCatchModule" type="WebModules.ErrorHandlerModule, WebModules" />
</httpModules>
之所以推荐这种方法,是因为这种实现易于扩展、通用;这种方法也是用的最多的。
在Global.asax中有一个Application_Error的方法,这个方法是在应用程序发生未处理异常时调用的,我们可以在这里添加处理代码:
void Application_Error(object sender, EventArgs e)
{
//获取到HttpUnhandledException异常,这个异常包含一个实际出现的异常
Exception ex = Server.GetLastError();
//实际发生的异常
Exception iex = ex.InnerException;
string errorMsg = String.Empty;
string particular = String.Empty;
if (iex != null)
{
errorMsg = iex.Message;
particular = iex.StackTrace;
}
else
{
errorMsg = ex.Message;
particular = ex.StackTrace;
}
HttpContext.Current.Response.Write("来自Global的错误处理<br />");
HttpContext.Current.Response.Write(errorMsg);
Server.ClearError();//处理完及时清理异常
}
这种处理方式同样能够获取全局未处理异常,但相对于使用HttpModule的实现,显得不够灵活和通用。
HttpModule优先于Global中的Application_Error方法。
我们还可以在页面中添加异常处理方法:在页面代码中添加方法Page_Error,这个方法会处理页面上发生的未处理异常信息。
protected void Page_Error(object sender, EventArgs e)
{
string errorMsg = String.Empty;
Exception currentError = Server.GetLastError();
errorMsg += "来自页面的异常处理<br />";
errorMsg += "系统发生错误:<br />";
errorMsg += "错误地址:" + Request.Url + "<br />";
errorMsg += "错误信息:" + currentError.Message + "<br />";
Response.Write(errorMsg);
Server.ClearError();//清除异常(否则将引发全局的Application_Error事件)
}
这种方法会优先于HttpModule和Global。
REFERENCE FROM : http://www.cnblogs.com/weixing/p/3326060.html
asp.net捕获全局未处理异常的几种方法的更多相关文章
- asp.net 捕获全局未处理异常的几种方法
通过HttpModule来捕获未处理的异常[推荐] 首先需要定义一个HttpModule,并监听未处理异常,代码如下: public void Init(HttpApplication context ...
- C#不用union,而是有更好的方式实现 .net自定义错误页面实现 .net自定义错误页面实现升级篇 .net捕捉全局未处理异常的3种方式 一款很不错的FLASH时种插件 关于c#中委托使用小结 WEB网站常见受攻击方式及解决办法 判断URL是否存在 提升高并发量服务器性能解决思路
C#不用union,而是有更好的方式实现 用过C/C++的人都知道有个union,特别好用,似乎char数组到short,int,float等的转换无所不能,也确实是能,并且用起来十分方便.那C# ...
- WPF捕获全局未处理异常
在WPF开发过程中我们一般都用try/catch块来捕获异常,但不是每个异常我们都能捕获,程序总会出现一些意想不到情况,抛出一些未捕获的异常,这时就要用到全局异常捕获,即在程序的最外层加上捕获未处理异 ...
- .net捕捉全局未处理异常的3种方式
前言: 我们在实际项目开发中,经常会遇到一些不可预见的异常产生,有的异常在程序运行时就对其进行处理(try)但是,有的程序不需要每一个地方都用try进行处理,那么针对这种情况,可以参照下面的方式,实现 ...
- ASP.Net Core中处理异常的几种方法
本文将介绍在ASP.Net Core中处理异常的几种方法 1使用开发人员异常页面(The developer exception page) 2配置HTTP错误代码页 Configuring stat ...
- asp.net MVC 网站图片防盗链的几种方法
目录 1. 通过 URL Rewrite Module 组件 2. 通过 nginx 图片防盗链 3.自定义 HttpHandler 处理 4. 通过 MVC 自定义路由规则防盗链 5. 通过 MVC ...
- 【转】在ASP.NET应用启动的时候初始化的几种方法
ASP.NET 4.0 之前,有两种方法:通过Global.asax 中的 Application_Start 事件启动,或者通过定义在 App_Code 文件夹中任意类中的AppInitialize ...
- ASP.NET,C#后台调用前台javascript的五种方法
C#后台调用前台javascript的五种方法 由于项目需要,用到其他项目组用VC开发的组件,在web后台代码无法访问这个组件,所以只好通过后台调用前台的javascript,从而操作这个组件.在网上 ...
- express捕获全局异常的三种方法
场景 express的路由里抛出异常后,全局中间件没办法捕获,需要在所有的路由函数里写try catch,这坑爹的逻辑让人每次都要多写n行代码 官方错误捕获中件间代码如下 app.use(functi ...
随机推荐
- 【CSS】使用CSS选择器
CCS选择器的作用是找出某类元素.以便使我们使用style元素或者外部样式表对这类元素设置样式. 1.使用CSS基本选择器 有些选择器使用起来非常简单,我们把这部分选择器称为基本选择器(basic s ...
- Java开发之JSP行为
一.Java Bean行文 1.重点说明 Java Bean行为是一组与Java Bean相关的行为,包括useBean行为.setProperty行为.getProperty行为等.Java Bea ...
- java编程思想读书笔记三(11-21)
十一:持有对象 >持有对象实例 ●数组将数字与对象联系起来.它保存类型明确的对象,查询对象时,不需要对结果做类型转换.他可以是多维的. 可以保存基本的数据类型.但是,数组一旦生成,容量就不会在变 ...
- Remove Duplicates From Sorted Array
Remove Duplicates from Sorted Array LeetCode OJ Given a sorted array, remove the duplicates in place ...
- CSS样式----图文详解:css样式表和选择器
主要内容 CSS概述 CSS和HTML结合的三种方式:行内样式表.内嵌样式表.外部样式表 CSS四种基本选择器:标签选择器.类选择器.ID选择器.通用选择器 CSS三种扩展选择器:组合选择器.后代选择 ...
- 第65课 C++中的异常处理(下)
1. C++中的异常处理 (1)catch语句块可以抛出异常 ①catch中获捕的异常可以被重新抛出 ②抛出的异常需要外层的try-catch块来捕获 ③catch(…)块中抛异常的方法是throw; ...
- .Net工程详解及项目版本管理
前言 写这篇文章的目地是为了让更多的小伙伴对VS生成的工程有一个清晰的认识.在开发过程中,为了赶进度,并不是每个人都有学习的时间. 但如果上层项目管理人员对这些工程目录不熟悉的话,把VS编译的中间文件 ...
- VS设置程序集属性(文件的详细信息)
适用范围 本文方法适用于:C#创建的控制台程序,WinForm,WPF等VS创建的.Net工程信息设置. 方法步骤 1.在 项目 上点击鼠标右键选择 属性 ,进入这个页面,点击 程序集信息(重点关注 ...
- Object.Destroy慎用
Object.Destory Destory(Object)并没有立刻,马上,及时的删除这个Object. 举例 在使用NGUI的Table或Grid进行布局时,就需要注意了:尽量不要使用Destro ...
- Unity3D FPS帧数修改
修改Unity的FPS FPS是游戏运行的帧数,本文讲解如何修改Unity引擎的FPS. 步骤 1.在 Edit/Project Settings/Quality 质量设置里把帧数设定关闭,关闭之后 ...