[整理]ASP.NET 中异常处理
[整理]ASP.NET 中异常处理
1.直接通过重写Controller的OnException来处理异常#
public class HomeController : Controller
{
public ActionResult Index( )
{
throw new Exception( "test ex." );
return View( );
}
protected ILog Log
{
get { return LogManager.CreateLog( ); }
}
protected override void OnException( ExceptionContext filterContext )
{
// 处理异常
if( !filterContext.ExceptionHandled )
{
var ex = filterContext.Exception;
Log.Error( ex.Message );
Log.Error( ex.StackTrace );
filterContext.ExceptionHandled = true;
}
base.OnException( filterContext );
}
}
2.通过添加自定义Filter并继承HandleErrorAttribute,重写OnException来处理异常
public class MvcHandleErrorAttribute : HandleErrorAttribute
{
protected ILog Log
{
get { return LogManager.CreateLog( ); }
}
public override void OnException( ExceptionContext filterContext )
{
// 处理异常
if( !filterContext.ExceptionHandled )
{
var ex = filterContext.Exception;
Log.Error( ex.Message );
Log.Error( ex.StackTrace );
filterContext.ExceptionHandled = true;
}
base.OnException( filterContext );
}
}
public class FilterConfig
{
public static void RegisterGlobalFilters( GlobalFilterCollection filters )
{
//filters.Add( new HandleErrorAttribute( ) );
filters.Add( new MvcHandleErrorAttribute( ) );
}
}
方案1和2可以单独使用,也可以同时使用,但是要注意的是,如果方案1和2同时存在,先进入方案2的OnException,后进入方案1的OnException,所以为了避免重复处理,在处理完异常后,执行
filterContext.ExceptionHandled = true;
这样,服务端响应返回一个EmptyResult实例,而不再返回一个异常(常见的黄页)
方案2中,由于自定义Filter是特性Attribute,即可以设置全局,也可以设置Controller,也可以设置Action,
3.通过自定义IHttpModule或是Global里处理异常
public class ExceptionModule : IHttpModule
{
private HttpApplication _application;
protected ILog Log
{
get { return LogManager.CreateLog( ); }
}
public void Dispose( )
{
//DO NOTHING
}
public void Init( HttpApplication context )
{
_application = context;
//注册异常事件方法
_application.Error += new EventHandler( OnApplicationError );
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler( CurrentDomain_UnhandledException );
}
void OnApplicationError( object sender, EventArgs e )
{
var loggedAccout = WebWorkContext.Current.LoggedAccount;
var ex = _application.Server.GetLastError( );
Log.Error( ( loggedAccout == null ) ? "n/a" : loggedAccout.Name );
Log.Error( ex.Message );
Log.Error( ex.StackTrace );
}
void CurrentDomain_UnhandledException( object sender, UnhandledExceptionEventArgs e )
{
if( e.ExceptionObject == null )
return;
Exception ex = e.ExceptionObject as Exception;
Log.Error( ex.Message );
Log.Error( ex.StackTrace );
}
}
和自定义IHttpModule里一样,在Global的 Application_Start里注册异常事件方法
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start( )
{
//注册异常事件方法
this.Error += new EventHandler( OnApplicationError );
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler( CurrentDomain_UnhandledException );
}
void OnApplicationError ( object sender, EventArgs e )
{
var ex = _application.Server.GetLastError( );
Log.Error( ex.Message );
Log.Error( ex.StackTrace );
}
}
4.未解决的问题
public class HomeController :Controller
{
public ActionResult Index( )
{
int count = 0;
Thread thread = new Thread( ( ) =>
{
throw new Exception( "Test线程异常" );//异常无限循环抛出,WebDev.Server4.0.exe停止工作。如何解决?
} );
thread.Start( );
//throw new Exception( "test ex." );
return View( );
}
}
5.WebApi中
public class WebApiExceptionFilterAttribute : ExceptionFilterAttribute
{
protected ILog Log
{
get { return LogManager.CreateLog( ); }
}
public override void OnException( HttpActionExecutedContext actionExecutedContext )
{
//处理异常
var ex = actionExecutedContext.Exception;
Log.Error( ex.Message );
Log.Error( ex.StackTrace );
base.OnException( actionExecutedContext );
}
}
public static class WebApiConfig
{
public static void Register( HttpConfiguration config )
{
...
config.Filters.Add( new WebApiExceptionFilterAttribute( ) );
}
}
参考:
http://www.cnblogs.com/luminji/archive/2011/01/05/1926033.html
http://www.asp.net/web-api/overview/error-handling/exception-handling
[整理]ASP.NET 中异常处理的更多相关文章
- ASP.NET中异常处理的注意事项
一.ASP.NET中需要引发异常的四类情况 1.如果运行代码后,造成内存泄漏.资源不可用或应用程序状态不可恢复,则引发异常.Console这个类中,有很多类似这样的代码: if ((value < ...
- ASP.NET MVC异常处理
ASP.NET MVC异常处理方案 如何保留异常前填写表单的数据 ASP.NET MVC中的统一化自定义异常处理 MVC过滤器详解 MVC过滤器使用案例:统一处理异常顺道精简代码 ASP.NET MV ...
- asp.net中当服务器出错时显示指定的错误页面
http://blog.csdn.net/helloxiaoyu/article/details/2943537 此篇文章描述了当异常再ASP.NET中发生时怎样使用C#.NET代码去拦截和相应异常. ...
- ASP.NET中处理异常的几种方式
1.程序中使用try catch 对于预知会发生异常的代码段使用try catch主动捕获异常,适用于提示给用户或跳转到错误页面,或者通过其它方式处理异常(日志.通知等). int i = 10; i ...
- asp.net中常用的几种身份验证方式
转载:http://www.cnblogs.com/dinglang/archive/2012/06/03/2532664.html 前言 在B/S系统开发中,经常需要使用"身份验证&q ...
- 使用Jquery解决Asp.Net中下拉列表值改变后访问服务器刷新界面。
使用DropDownList控件时,改变选项时,获取服务端数据库数据并刷新界面数据. 1. 绑定DropDownList控件SelectedIndexChanged事件. 2. AutoPortBac ...
- 【译】在Asp.Net中操作PDF – iTextSharp -利用块,短语,段落添加文本
原文 [译]在Asp.Net中操作PDF – iTextSharp -利用块,短语,段落添加文本 本篇文章是讲述使用iTextSharp这个开源组件的系列文章的第三篇,iTextSharp可以通过As ...
- NET中异常处理的最佳实践
NET中异常处理的最佳实践 本文翻译自CodeProject上的一篇文章,原文地址. 目录 介绍 做最坏的打算 提前检查 不要信任外部数据 可信任的设备:摄像头.鼠标以及键盘 “写操作”同样可能失效 ...
- ASP.NET中的C#基础知识
ASP.NET中的C#基础知识 说明:asp.net作为一种开发框架现在已经广为应用,其开发的基础除了前端的html.css.JavaScript等后端最重要的语言支持还是C#,下面将主要用到的基础知 ...
随机推荐
- 3.3V电源LDO
1:今天用到1颗3.3v的LDO,如图 输入输出都是3.3V,但是一个是做模拟电压,以后遇到这种情况可以这样使用. 2:二极管降压电路,1.8V转1.5V
- GitHub 新手教程 四,Git GUI 新手教程(1),OpenSSH Public Key
1,从开始菜单 启动 Git GUI,或者运行: D:\soft\Git\cmd\git-gui.exe(D:\soft\Git 为您的 GitHub 安装文件夹) 2,获取 SSH 密钥: 3,点击 ...
- PS官方正式中文版(搬砖分享)
https://pan.baidu.com/s/1c3IdQq0 PS官方正式中文版(搬砖分享) 注意事项: 1.安装开始前请先断网,在成功破解激活前请全程断网: 2.安装完成后先试运行软件一次,然后 ...
- Linux 终端快捷键整理
一.历史命令相关快捷键 快捷键 说明 ↑.↓ 显示历史命令 !! 执行上一个命令 !n 执行历史命令中第 n 条命令 !-n 执行历史命令中倒数第 n 条命令 二.移动相关快捷键 快捷键 说明 Ctr ...
- Python机器学习/LinearRegression(线性回归模型)(附源码)
LinearRegression(线性回归) 2019-02-20 20:25:47 1.线性回归简介 线性回归定义: 百科中解释 我个人的理解就是:线性回归算法就是一个使用线性函数作为模型框架($ ...
- 手机访问PC端
输入所要访问的端口,然后默认下一步即可.
- request.getParameter中文乱码问题解决办法
new String(request.getParameter("pageNo").getBytes("ISO-8859-1"),"UTF-8&quo ...
- 第四篇——Spring音乐登录界面设计及实现(C#)
Spring音乐播放器,我们小组设计其启动时有一个登录界面,用户初次可以注册,输入用户名和密码,点击注册即将输入信息保存到register文本文件中:如果已有用户名,输入用户名和密码,点击登录,程序会 ...
- 原生 js 封装get ,post, delete 请求
现在的项目中都在用VUE 以及react 等MVC, MVVM 框架. 丢弃了原始的JQ .不可能为了个$.ajax();而把JQ引进来吧. 在vue1的开发中 提供了 vueResouce, vu ...
- MyBatis关联查询,一对一关联查询
数据库E-R关系 实体类 public class City { Long id; String name; Long countryId; Date lastUpdate; } public cla ...