ASP.NET全局异常处理
Web项目部署后,异常直接暴露给用户会产生很不好的体验。只是暴露在服务器端又无法实时记录异常原因以便加以重现并修复。所以配合Log4Net记录日志信息,同时全局异常处理来营造良好用户体验就比较重要了。
在Web.config加以配置:
<httpModules>
<add name="ErrorModule" type="ErrorModule"/>
</httpModules>
早期开发时错误处理类放在App_Code里了,代码如下:
using System;
using System.Web; public class ErrorModule : IHttpModule
{
#region IHttpModule 成员 void IHttpModule.Dispose() { } void IHttpModule.Init(HttpApplication context)
{
context.Error += new System.EventHandler(context_Error);
} #endregion void context_Error(object sender, System.EventArgs e)
{
HttpContext context = HttpContext.Current;
Exception ex = context.Server.GetLastError();
String errorCode = Guid.NewGuid().ToString();
String errorMsg = ex.InnerException == null ? ex.GetBaseException().Message : ex.InnerException.Message;
//log4net.LogManager.GetLogger(GetType()).Error(BuildErrorString(errorCode, context));//Log4Netf辅助类
context.Server.ClearError();
ShowError(errorCode, errorMsg, context);
} private String BuildErrorString(string errorCode, HttpContext context)
{
Exception ex = context.Server.GetLastError();
System.Text.StringBuilder errorStr = new System.Text.StringBuilder();
if (ex != null)
{
errorStr.Append("{ErrorCode:");
errorStr.Append(errorCode);
errorStr.Append(",ErrorPage:");
errorStr.Append(context.Request.Url.ToString());
errorStr.Append(",ErrorMsg:");
errorStr.Append(ex.GetBaseException().Message);
errorStr.Append(",StackTrace:");
errorStr.Append(ex.StackTrace);
if (ex.InnerException != null)
{
errorStr.Append(",InnerErrorMsg:");
errorStr.Append(ex.InnerException.Message);
errorStr.Append(",InnerStackTrace:");
errorStr.Append(ex.InnerException.StackTrace);
}
errorStr.Append("}");
}
return errorStr.ToString();
} private void ShowError(string errorCode, string errorMsg, HttpContext context)
{
HttpResponse response = context.Response;
System.Text.StringBuilder errorPage = new System.Text.StringBuilder();
errorPage.Append("<html><head><meta http-equiv='Content-Type' content='text/html; charset=utf-8'/></head><body>");
errorPage.Append("<div style='margin:5px;border:1px solid #DDCCDD;padding:5px;'><p><strong>错误代码:</strong>");
errorPage.Append(errorCode);
errorPage.Append("</p><p><strong>错误消息:</strong>");
errorPage.Append(errorMsg);
errorPage.Append("</p><p><strong>系统异常请重试,若重复出现请联系系统管理员!</strong></p></div></body></html>");
response.Write(errorPage.ToString());
response.End();
response.Clear();
}
}
捕获异常记录日志并呈现自定义页面,同时保留错误代码和主要信息便于反馈给系统管理员。
ASP.NET全局异常处理的更多相关文章
- Global Error Handling in ASP.NET Web API 2(webapi2 中的全局异常处理)
目前,在Web API中没有简单的方法来记录或处理全局异常(webapi1中).一些未处理的异常可以通过exception filters进行处理,但是有许多情况exception filters无法 ...
- asp.net core添加全局异常处理及log4net、Nlog应用
0.目录 整体架构目录:ASP.NET Core分布式项目实战-目录 一.介绍 此篇文章将会介绍项目的全局异常收集以及采用log4net或者NLog记录. 众所周知,一旦自己的项目报错,如果没有进行处 ...
- ASP.NET Core 中间件自定义全局异常处理
目录 背景 ASP.NET Core过滤器(Filter) ASP.NET Core 中间件(Middleware) 自定义全局异常处理 .Net Core中使用ExceptionFilter .Ne ...
- ASP.NET Core 中间件的使用(三):全局异常处理机制
前言 我们经常听到"秒修复秒上线",觉得很厉害的样子. 其实不然,这只是一个调侃而已,出现问题的方式很多(逻辑漏洞.代码异常.操作方式不正确等). 我们今天来说代码异常问题怎么快速 ...
- .NET MVC全局异常处理(一)
目录 .NET MVC全局异常处理 IIS配置 静态错误页配置 .NET错误页配置 程序设置 全局异常配置 .NET MVC全局异常处理 一直知道有.NET有相关的配置,但没有实际做过,以为改下设定就 ...
- [整理]ASP.NET 中异常处理
[整理]ASP.NET 中异常处理 1.直接通过重写Controller的OnException来处理异常 public class HomeController : Controller { pub ...
- NET MVC全局异常处理(一) 【转载】网站遭遇DDoS攻击怎么办 使用 HttpRequester 更方便的发起 HTTP 请求 C#文件流。 Url的Base64编码以及解码 C#计算字符串长度,汉字算两个字符 2019周笔记(2.18-2.23) Mysql语句中当前时间不能直接使用C#中的Date.Now传输 Mysql中Count函数的正确使用
NET MVC全局异常处理(一) 目录 .NET MVC全局异常处理 IIS配置 静态错误页配置 .NET错误页配置 程序设置 全局异常配置 .NET MVC全局异常处理 一直知道有.NET有相关 ...
- 深入探究ASP.NET Core异常处理中间件
前言 全局异常处理是我们编程过程中不可或缺的重要环节.有了全局异常处理机制给我们带来了很多便捷,首先我们不用满屏幕处理程序可能出现的异常,其次我们可以对异常进行统一的处理,比如收集异常信息或者 ...
- 使用.NET 6开发TodoList应用(8)——实现全局异常处理
系列导航 使用.NET 6开发TodoList应用文章索引 需求 因为在项目中,会有各种各样的领域异常或系统异常被抛出来,那么在Controller里就需要进行完整的try-catch捕获,并根据是否 ...
随机推荐
- 常用系统的伪静态规则列表(rewrite)
以前在云虚拟机上,是在iis上配置伪静态.这次买的一个香港的空间,商家说把伪静态规则直接放在web下即可. 注意,所有规则放在一起可能会有冲突,只放置你需要的规则即可. #shopex4.8 Rewr ...
- 【转】xml文件中加入本地的dtd约束文件
首先,我是以加载Struts2的来演示: 1 我们可以看到,越是文件中的 显示的是PUBLIC, 即从网络中获取约束文件dtd ,此时我需要将其配置成从自己的本地来获取dit文件 首先,先要有stru ...
- enumerate函数
enumerate(list):返回元组,带有索引值,常用用法: for i in enemerate(list): print(i)
- BZOJ3065 带插入区间K小值 || 洛谷P4278
这是一道让我崩溃的题...... 然鹅洛谷上时限被改然后只有20分......好像所有人都被卡了(雾) 由于替罪羊树不是依靠旋转操作而是依靠暴力重构的方式维护树的平衡,所以我们可以考虑使用替罪羊树套区 ...
- CentOS7下php安装mcrypt扩展
https://blog.csdn.net/skykingf/article/details/40185405 以下步骤均为本人实际操作,可能与你的安装方法有所区别,但我会尽量排除疑惑) 大致步骤(1 ...
- log4j详解与实战
[转自] http://www.iteye.com/topic/378077 log4j是一个非常强大的log记录软件,下面我们就来看看在项目中如何使log4j. 首先当然是得到log4j的jar档, ...
- 【实战】SSL和TLS漏洞验证
工具下载:git clone https://github.com/drwetter/testssl.sh.git 实验环境:192.168.1.22(bee-box v1.6) 192.168.1. ...
- aoj0558
一.题意: 在H * W的地图上有N个奶酪工厂,分别生产硬度为1-N的奶酪.有一只吃货老鼠准备从老鼠洞出发吃遍每一个工厂的奶酪.老鼠有一个体力值,初始时为1,每吃一个工厂的奶酪体力值增加1(每个工厂只 ...
- Yarn 包管理工具
已经安装的 yarn add vue vue@2.2.5 yarn add element-ui -S yarn add bootstrap@4.0.0-alpha.6 --save yarn ...
- springboot项目中引用其他springboot项目jar
1. 剔除要引入的springboot项目中不需要的文件:如Application和ApplicationTests等 2.打包 不能使用springboot项目自带的打包插件进行打包: 3.打包 4 ...