asp.net C#的异常处理机制程序代码

何完美的应用程序和技术高明的程序员,都不可能是绝对不出差错的。与其追求完美无错的代码,还不如将程序中可能预知的异常在发布前进行很好的处理,可能是最有价值的。那么,C#是如何处理异常的呢?首先,我们从最普通的异常说起:

使用try-catch-finally块捕获异常,基本格式如下:

 代码如下 复制代码

try
 {
     //获取并使用资源,可能出现异常
 }
 catch(DivideByZeroException de)
 {
 }
 catch(ArithmeticException ae)
 {
 }
 catch(Exception e)
 {
     //捕获并处理异常,当出现多个异常且异常类之间有继承关系(DivideByZeroException==>ArithmeticException==>Exception),
      //捕获顺序是子类在前,基类在后
 }
 finally
 {
     //无论什么情况(即使在catch块中return)下,都会执行该块的代码(如:关闭文件)
     //另外需要说明的是,在finally块中使用任何break、continue、return退出都是非法的。
 }

 

ASP.NET异常处理

除了以上的try-catch-finally的处理方式外,还有三种方式来捕获异常:

1. 页面级错误处理(通过Page_Error事件)

 

 代码如下 复制代码
protected void Page_Error(object sender, EventArgs e)
{
    string errorMsg = String.Empty;
    Exception currentError = Server.GetLastError();
    errorMsg += "系统发生错误:<br/>";
    errorMsg += "错误地址:" + Request.Url + "<br/>";
    errorMsg += "错误信息:" + currentError.Message + "<br/>";
    Response.Write(errorMsg);
    Server.ClearError();//清除异常(否则将引发全局的Application_Error事件)
}

2. 应用程序级(global.asax)错误处理(通过Application_Error事件)

 

 代码如下 复制代码
protected void Application_Error(object sender, EventArgs e)
{
    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;
    }
    //AddLog(errorMsg, particular);
    Server.ClearError();//处理完及时清理异常
}

3. 应用程序配置(web.config)

 

 代码如下 复制代码
<system.web>   
  <!--mode有三种值:On,Off,RemoteOnly,defaultRedirect出现错误重定向的URL-->
  <customErrors mode="On" defaultRedirect="ErrorPage.htm">
    <!--statusCode错误状态码,redirect错误重定向的URL-->
    <error statusCode="403" redirect="NoAccess.htm"/>
    <error statusCode="404" redirect="FileNoFound.htm"/>
  </customErrors>
</system.web>

 

WinForm应用程序异常处理

在WinForm的应用程序中,除了采用try-catch-finally的方式外,如何实现全局的异常处理呢?因为不具有Application_Error事件,但可以通过委托的方式来实现。

 

 代码如下 复制代码

internal class ThreadExceptionHandler
{
    //实现错误异常事件
     public void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
    {
        try
        {
            //如果用户单击"Abort"则退出应用程序
              DialogResult result = ShowThreadExceptionDialog(e.Exception);
            if (result == DialogResult.Abort)
            {
                Application.Exit();
            }
        }
        catch
        {
            try
            {
                MessageBox.Show("严重错误", "严重错误", MessageBoxButtons.OK, MessageBoxIcon.Stop);
            }
            finally
            {
                Application.Exit();
            }
        }
    }
    private DialogResult ShowThreadExceptionDialog(Exception e)
    {
        string errorMsg = "错误信息:tt" + e.Message + "tt" + e.GetType() + "tt" + e.StackTrace;
        return MessageBox.Show(errorMsg, "Application Error", MessageBoxButtons.AbortRetryIgnore, MessageBoxIcon.Stop);
    }
}
static class Program
{
    ///<summary>
    /// The main entry point for the application.
    ///</summary>
    [STAThread]
    static void Main()
    {
        ThreadExceptionHandler handler = new ThreadExceptionHandler();
        Application.ThreadException += new ThreadExceptionEventHandler(handler.Application_ThreadException);
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new frmEvent());
    }
}
public partial class frmEvent : Form
{
    private void btnException_Click(object sender, EventArgs e)
    {
        throw new InvalidOperationException("无效的操作异常!");
    }
}
时间: 2024-09-08 11:42:38

asp.net C#的异常处理机制程序代码的相关文章

asp.net中禁止页面缓存程序代码

方法一:导航时用服务器端的Response.Redirect方法,或者用前端得window.location.replace方法. 方法二:禁用ASP.NET页面缓存. 在必要的时候我还是推荐方法二的.因为我们做开发的不能控制浏览器的设置.用户如果把IE设置为从不检查更新缓存的问题则不好避免,所以还是用方法二,让IE的临时文件夹不存在页面文件. 另外,是否禁用页面缓存要根据实际情况来说,起初我认为页面缓存只是缓存在服务器,后来看了一篇blog 发现缓存的意义还是很大的.在很多情况下可以大大减小服

ASP读取IIS日志的小程序代码

  ASP读取IIS日志文件的代码,由此你可以编写实现一个IIS日志浏览程序,可读取IIS日志中的访问时间.客户端IP,请求目标.协议状态等内容,如果要读取更多日志内容,你可参考ASP中的MSWC.IISLog对象的一系列方法,本代码只演示如果建立日志读取对象,到最终按列表形式列出日志的每一条内容,方便网站管理员参考. 直接保存上面的代码为一个ASP文件,运行就行了,为了测试方便,这里帖出供测试的IIS日志文件的代码: 请保存上述日志代码为:ex130215.log,注意这个文件名不要错,因为代

asp ajax无刷新保存数据程序代码

//首先创建访问对象 request  代码如下 复制代码 var request = false; try{  request = new XMLHttpRequest(); } catch (trymicrosoft) {   try{     request = new ActiveXObject("Msxml2.XMLHTTP");    }   catch (othermicrosoft) {     try {       request = new ActiveXObje

实现ASP.NET多文件上传程序代码_实用技巧

upload.aspx 复制代码 代码如下: <%@ Page language="c#" Codebehind="UpLoad.aspx.cs" AutoEventWireup="false" Inherits="WebPortal.Upload" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >

asp.net Web页执行SQL程序代码

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ManageSQL.aspx.cs" Inherits="manage_ManageSQL" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/

asp生成xml文档实例程序代码

xml部分: <?xml version="1.0" encoding="gb2312"?> <bcastr> <item item_url='../uploadpic/2010052660955221.jpg' link='http://www.111cn.net' <itemtitle='01'></item> <item item_url='../uploadpic/2010052660981189.

asp.net中无损图片添加水印程序代码

水印是为了防止别盗用我们的图片. 两种方式实现水印效果 1)可以在用户上传时添加水印. a) 好处:与2种方法相比,用户每次读取此图片时,服务器直接发送给客户就行了. b) 缺点:破坏了原始图片. 2)通过全局的一般处理程序,当用户请求这张图片时,加水印. a) 好处:原始图片没有被破坏 b) 缺点:用户每次请求时都需要对请求的图片进行加水印处理,浪费的服务器的资源. 代码实现第二种方式: 代码如下:  代码如下 复制代码   using System; using System.Collect

asp.net Grid 导出Excel实现程序代码_实用技巧

1. Aspx后台代码输出Content Type信息 复制代码 代码如下: Response.ClearContent(); Response.AddHeader("content-disposition", "attachment; filename=MyExcelFile.xls"); Response.ContentType = "application/excel"; Response.Write(GetGridTableHtml(Gr

ASP.Net中程序构架与程序代码的分离

asp.net|程序 一年前,当本人拿到一个名叫TWIG的PHP程序时,立即被作者OOP编程思想所折服,很难想像TWIG中所有的功能(行事历.邮件.个性化)均在一个PHP文件(index.php3)中执行完成,这就得益于作者采用了程序代码与页面构架分离的思想,但是我也看到尽管作者做了很大的努力,但由于PHP的局限性,程序并没有真正做到代码与构架的分离,index.php3这个主文件由于要执行的功能太多,所以其require的模块文件相当之多,至使整个文件依然显得十分零乱,本人愚昧,当时花了半个月