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捕获,并根据是否 ...
随机推荐
- 训练DCGAN(pytorch官网版本)
将pytorch官网的python代码当下来,然后下载好celeba数据集(百度网盘),在代码旁新建celeba文件夹,将解压后的img_align_celeba文件夹放进去,就可以运行代码了. 输出 ...
- BCH code
简单介绍 若循环码的生成多项式具有如下形式\(g(x)=LCM[m_{1}(x),m_{3}(x)..m_{2t-1}(x)]\) 其中LCM表示最小公倍式,t为纠错个数,\(m_{i}(x)\)为素 ...
- Python web前端 09 jQuery
Python web前端 09 jQuery 一.三个重要网址 http://jquery.cuishifeng.cn/ #中文查询网站 http://www.bootcdn.cn/ #引入jq ht ...
- qdu_组队训练(ABCFIJK)
A - Second-price Auction Do you know second-price auction? It's very simple but famous. In a second- ...
- HDU 6336 (规律 + 二维矩阵的前缀和妙用)
题目 给出长度为n 的A矩阵 , 按 int cursor = 0; for (int i = 0; ; ++i) { for (int j = 0; j <= i; ++j) { M[j][i ...
- HOW TO MAKE IT FLOW ?
FLEXnet Licensing is a member of the FLEXnet Publisher family of products. It is the most popular ...
- Union Find - 20181102 - 20181105
Union Find: 589. Connecting Graph public class ConnectingGraph { //父节点数组 private int[] father = null ...
- Jquery 循环内间隔执行 异步执行
<script type="text/javascript"> var arr = new Array(); var arrk = 0; jQuery(function ...
- PIE SDK栅格RGB渲染
1. 功能简介 RGB色彩模式是一种颜色标准,是通过对红(R).绿(G).蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB即是代表红.绿.蓝三个通道的颜色,这个标准几乎包 ...
- window.open打开窗口的几种方式
1. 在当前窗口打开百度,并且使URL地址出现在搜索栏中. window.open("http://www.baidu.com/", "_search"); w ...