惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Vercel News
Vercel News
博客园 - 司徒正美
D
DataBreaches.Net
J
Java Code Geeks
月光博客
月光博客
MyScale Blog
MyScale Blog
博客园 - Franky
Jina AI
Jina AI
量子位
博客园 - 聂微东
博客园 - 叶小钗
M
MIT News - Artificial intelligence
N
Netflix TechBlog - Medium
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
S
SegmentFault 最新的问题
宝玉的分享
宝玉的分享
T
Tailwind CSS Blog
博客园 - 【当耐特】
Blog — PlanetScale
Blog — PlanetScale
I
InfoQ
小众软件
小众软件
B
Blog RSS Feed
Hugging Face - Blog
Hugging Face - Blog
博客园_首页

博客园 - 斧头帮少帮主

猜一猜,会输出什么? Log4Net最简单的使用配置_AX 一个修改后的JS日历(Calendar)控件_AX - 斧头帮少帮主 - 博客园 页面回传(PostBack)后恢复滚动条的位置_AX - 斧头帮少帮主 - 博客园 Hidden Field 的值不能回传(PostBack)到后台_AX Delegate(代理)异常:该委托必须有一个目标 WCF学习随笔6--Version变更--我们在前进_AX WCF学习随笔5--我知道:Known--可憐的孩子_AX WCF学习随笔4--契约|序列化详解--祭斧_AX WCF学习随笔3--第一个Sample--祭斧_AX - 斧头帮少帮主 - 博客园 WCF学习随笔2--Contract--磨斧_AX WCF学习随笔1--扫盲--磨斧_AX 把项目运行情况写入系统日志(Log)的三种方法【续】_AX 把项目运行情况写入系统日志(Log)的三种方法_AX 为用户控件User Control添加事件_AX XML常用操作总结_AX DataTable常用操作总结_AX - 斧头帮少帮主 - 博客园 .NET(C#)代码性能优化_AX - 斧头帮少帮主 - 博客园 Panel的不足及弥补_AX - 斧头帮少帮主 - 博客园
ASP.NET错误处理的两种方案_AX
斧头帮少帮主 · 2008-08-05 · via 博客园 - 斧头帮少帮主

网页出错,在所难免,如何处理,方案任选.

一般页面出错后,我们的处理方法一般分为三步:业务逻辑→写入日志→跳转到默认页或指定页

【方案一】

1.在web.config添加一个节点,指定跳转到的默认页.mode为RemoteOnly表示本地报黄页,其它用户跳转.

<system.web>
    
<customErrors mode="On" defaultRedirect="default.aspx">            
    
</customErrors>
</system.web>

2.在Global.asax中添加错误处理

    void Application_Error(object sender, EventArgs e) 
    { 
        
//在出现未处理的错误时运行的代码
        
//业务处理
        
//写日志,下面是一个例子,建议使用第三方控件Log4Net
        try
        {
            
using (System.IO.StreamWriter sw = System.IO.File.AppendText("D:\\AX.txt"))
            {
                sw.WriteLine(Server.GetLastError().InnerException.Message);
                sw.WriteLine(Server.GetLastError().InnerException.StackTrace);
                sw.Flush();
            }
        }
        
catch (Exception)
        {
        }
    }

3.如果某个Page出错后需要跳转到指定页,重写Page的AddParsedSubObject方法,

以保证页面加载最开始为Errorpage属性赋值,其属性依赖于第一步中的mode="On",

不确定mode为RemoteOnly是否可以

(跳转页后面会带系统默认的参数aspxerrorpath=...)

懒人可以写在Page_Load方法的第一句话中,该方法之前出错将会使用第二步中的处理方式.我是懒人...

    protected override void AddParsedSubObject(object obj)
    {
        ErrorPage 
= "Log4Net.aspx";
        
base.AddParsedSubObject(obj);
    }

【追加】还可以在页面前端加Attribute:ErrorPage

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="OnErrorTest.aspx.cs" Inherits="OnErrorTest" ErrorPage="~/AX.aspx" %>

【方案二】

1.在Global.asax中添加错误处理,并指定默认页.

    void Application_Error(object sender, EventArgs e) 
    { 
        
//在出现未处理的错误时运行的代码
        
//业务处理
        
//写日志,下面是一个例子,建议使用第三方控件Log4Net
        try
        {
            
using (System.IO.StreamWriter sw = System.IO.File.AppendText("D:\\AX.txt"))
            {
                
//Server.GetLastError().InnerException.ToString()是异常的详细内容
                sw.WriteLine(Server.GetLastError().InnerException.ToString());
                sw.Flush();
            }
        }
        
finally
        {
            
//跳转到默认页
            Server.Transfer("Default.aspx");
        }
    }

2.如果某个Page出错后需要跳转到指定页

    void Page_Error(object sender, EventArgs e)
    {   
        
//业务处理
        
//写日志
        
//跳转到指定页
        
//Server.Transfer("Log4Net.aspx");
        
//
        
//Response.Redirect("Log4Net.aspx");//清除错误,如果执行了上面的跳转页,将永远不会执行到这句话
        
//如果不清除,就会执行Global.asax的Application_Error()方法
        
//Server.ClearError();
    }

推荐使用方案一,因为可以在web.config修改跳转的默认值