http://blog.csdn.net/helloxiaoyu/article/details/2943537

此篇文章描述了当异常再ASP.NET中发生时怎样使用C#.NET代码去拦截和相应异常。ASP.NET在异常处理方面比传统的ASP更优越。在ASP.NET中,允许在应用程序的各个层面中处理异常。
ASP.NET的新特性
ASP.NET为捕获并处理异常提供了更多的便利。在传统的ASP程序中,我们用“On Error Resume Next”(或Jscript的Try-catch)来处理异常。另一个方法是如果你运行IIS5.0的话,使用ASPError对象去创建一个自定义的错误页面,然而,这些方法有他们的局限性.
当一个ASP.NET应用程序出错的时候,ASP.NET提供一些能够捕捉和处理这些异常的办法。ASPNET提供三个主要的方法允许你捕捉和处理错误,当错误发生时:Page_Error事件 Application_Error事件,和应用程序配置文件(Web.config)
    此篇文章旨在演示怎样在你的ASPNET应用程序使用这三个新功能。但是此篇文章不对其他的异常处理方式进行描述,如:try-catch-finally,和CLR(Common Language Runtime)异常处理系统。 
怎样使用Page_Error事件
Page_Error事件提供一种拦截页面层异常的方法.你可以简单的显示错误信息(见示例),或者记入日志又或者执行其他的动作.
注意:这个例子演示了怎样在浏览器中显示详细的错误信息.需要注意的是显示详细的错误信息给用户不是一个好办法,特别是当应用程序在Internet上运行的时候.更适合的方法是显示一个信息给用户通知他们一个错误发生,然后将错误的详细信息记入日志.
这个例子抛出一个null exception,强制异常出现在Page_Load事件中.按照如下步骤创建测试Page_Error事件的页面. 
按照如下的步骤在您的项目中创建一个名为PageEvent.aspx的新文件:

打开VisualStudio.NET

在解决方案浏览器中,右击项目节点,指向添加,然后点击添加新窗体.

在名称文本框中,输入PageEven.aspx,然后点击Open.

将下面的代码添加到PageEvent.aspx中:

<script language=C# runat="server">
void Page_Load(object sender, System.EventArgs e)
{
     throw(new ArgumentNullException());
}
public void Page_Error(object sender,EventArgs e)
{
     Exception objErr = Server.GetLastError().GetBaseException();
     string err =   "<b>Error Caught in Page_Error event</b><hr><br>" + 
                   "<br><b>Error in: </b>" + Request.Url.ToString() +
                    "<br><b>Error Message: </b>" + objErr.Message.ToString()+
                   "<br><b>Stack Trace:</b><br>" + 
                       objErr.StackTrace.ToString();
     Response.Write(err.ToString());
     Server.ClearError();
}
</script>

在文件菜单中,单击保存.

右击这个页面,然后单击在浏览器中浏览以运行此页面.异常会按照我们预想的抛出,并且被上面的代码所处理.

注意:你可能注意到这个代码调用了Server.ClearError方法.这个方法阻止异常传递到Application_Error事件中.
此外,你应该注意@Page标签的Inherits属性。如果Inherits被设置,你应该首先编译整个项目,否则在浏览此页面的时候你将收到如下错误信息: 'Project.PageEvent' is not a valid type 
怎样使用Application_Error事件
与Page_Error相似,你可以使用Application_Error事件在你的应用程序中拦截异常由于此事件的应用程序级作用范围,你可以将错误信息记录入日志,或者处理其它的可能发生的应用程序级别的异常.
    下述示例源自前述的Page_Error事件代码,并且当Page_Load事件中的异常没有被Page_Error事件处理的时候被激发.Application_Error事件被指定在Global.asax文件中.为简化,下述步骤创建了一个新的页面并且抛出一个异常,在Global.asax文件中Application_Error事件里拦截和处理这个异常,将错误写入日志.下述步骤演示了怎样使用Application_Error事件: 
在你的项目中添加一个名为AppEvent.aspx的文件. 
将下述代码添加到AppEvent.aspx文件中: 
    <script language=C# runat="server">
       void Page_Load(object sender, System.EventArgs e)
       {
             throw(new ArgumentNullException());
        }
</script> 
  <script language=C# runat="server">
  void Page_Load(object sender, System.EventArgs e)
        {
               throw(new ArgumentNullException());
      }

</script>

保存.

将Application_Error添加到Global.asax文件中以拦截在ApEvent.aspx文件中抛出的异常.注意,你必须在Global.asax文件中添加对System.Diagnostics命名空间的引用才能使用事件日志.
将如下代码添加到Global.asax 文件中:

using System.Diagnostics;
protected void Application_Error(object sender, EventArgs e)

{
Exception objErr = Server.GetLastError().GetBaseException();
string err =   "Error Caught in Application_Error event/n" +
                 "Error in: " + Request.Url.ToString() +
                  "/nError Message:" + objErr.Message.ToString()+ 
                  "/nStack Trace:" + objErr.StackTrace.ToString();
 EventLog.WriteEntry("Sample_WebApp",err,EventLogEntryType.Error);
  Server.ClearError();
  //additional actions...
}

保存.

编译.

运行

怎样使用Web.config 文件
如果你没有在调用Server.ClearError方法,或者在Page_Error或Application_Error方法中捕获异常,那么异常会按照Web.config文件中<customErrors>区段的使者被处理.在<customErrors>区段中,你可以指定一个默认的错误导向页面(defaultRedirect)或指定一个特定的HTTP页面错误代码.你可以使用此方法自定义用户接收到的错误代码.

如果错误在应用程序的各个级别都没有被捕获,那么自定义页面就会显示.此节说明了怎样编辑Global.asax文件以保证Server.ClearError方法不会被调用.因此,异常才会被Web.congif文件作为最后一环异常处理方法被捕捉.
打开上一个例子的Global.asax 文件. 
注释掉Server.ClearError 行. 
保存,你的代码应该看起来像下面的代码: 
using System.Diagnostics;
protected void Application_Error(object sender, EventArgs e)
{
   Exception objErr = Server.GetLastError().GetBaseException();
   string err =   "Error Caught in Application_Error event/n" +
                 "Error in: " + Request.Url.ToString() +
                 "/nError Message:" + objErr.Message.ToString() + 
                  "/nStack Trace:" + objErr.StackTrace.ToString();
    EventLog.WriteEntry("Sample_WebApp",err,EventLogEntryType.Error);
    //Server.ClearError();
  //additional actions...
}  
添加下面的代码加入以此来将用户重定向到自定义的页面: 
<customErrors defaultRedirect="http://hostName/applicationName/errorStatus.htm" mode="On">
</customErrors> 
注意: 你必须修改defaultRedirect 属性以关联你自己的应用程序页面.. 
由于在此层面被拦截的异常被发送到一个默认的错误页面,你必须创建一个错误页面并且命名为ErrorStatus.htm. 请记住你使用此方法是在控制那些能够呈现给用户的东西,所以这个例子使用了一个html文件充当错误页面。将下面的代码添加到ErrorStatus.htm文件中.<HTML><HEAD><TITLE></TITLE>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 7.0">
</HEAD>
<BODY>
<b>Custom Error page!</b>
<br>You have been redirected here from the &lt;customErrors&gt; section of the Web.config file.</BODY>  </HTML> 
保存,编译项目,然后在浏览器中浏览AppEvent.aspx测试上述代码.注意当异常被抛出的时候,你会被重定向到ErrorStatus.htm页面
尽管你可以通过设置<customErrors>区段的defaultRedirect属性来引用一个默认的错误页面,你还可以指定当特定的HTTP代码的异常出现的时候用户被导向的不同页面.<error>子元素用来设置这个功能.例: 
<customErrors defaultRedirect="http://hostName/applicationName/errorStatus.htm" mode="On">
       <error statusCode="404" redirect="filenotfound.htm" />
</customErrors> 
注意:这里的defaultRedirect属性设置的是HTML页面.如果你想在一个aspx文件中调用Server.GetLastError方法的话(像上面Page_Error和Application_Error的例子),你必须在重定向之前将异常储存在Session变量中或其他合适的地方.
Notice that the <customErrors> section includes a mode attribute that is set to On. The mode attribute is used to control how the error redirection occurs. For example, if you are developing the application, you most likely want to see the actual ASP.NET error messages and do not want to be redirected to the more user-friendly error page. The mode attribute includes the following settings: 
<customErrors>区段包括一个被设置为ON的Mode属性.这个属性是用来控制错误重定向的方式.举个例子,如果你在开发一个Web应用程序,你可能希望看到实际的ASPENET错误信息,而不希望被重定向到一个用好的错误页面.这个属性包括如下设置:
On: 未被处理的异常发生时将用户重定向到defaultRedirect 属性设置的页面.多数用在产品. 
Off: 用户会开到详细错误信息,并且不会被重定向到指定的错误页面.这个设置多数用在开发过程中.. 
RemoteOnly: 只有当本地计算机访问的时候(localhost)才能获得异常的详细信息.其它的用户会被重定向到指定的错误页面.主要用在处错过程中.

asp.net中c# 怎么做当上传打文件时提示上传文件太大不能上

http://bbs.csdn.net/topics/380249577

Web上传文件的原理及实现

http://www.cnblogs.com/nokiaguy/archive/2008/05/29/1209858.html

asp.net中当服务器出错时显示指定的错误页面的更多相关文章

  1. ASP程序中调用Now()总显示“上午”和“下午”,如何解决?

    ASP程序中调用Now()总显示这样的格式:“2007-4-20 下午 06:06:38”,我要的正确格式为“2007-4-20 18:06:38”,我已经通过控制面板==>区域和语言选项==& ...

  2. 使用ueditor中的setContent() 时经常报innerHtml错误(笔记)

    1)今天遇到个问题,使用ueditor中的setContent() 时经常报innerHtml错误:网上找了下解决方案:发现这个可以用: 不能创建editor之后马上使用ueditor.setCont ...

  3. Access 中数据库操作时提示from子句语法错误

    问题:如果在Access 中数据库操作时提示from子句语法错误原因:语句中某一单词为Access中的关键字.如:select * from user.其中user就是一关键字.解决:用中括号[]将其 ...

  4. windows 2008 中IIS7.0以上如何设置404错误页面

    404错误页面的设置,不仅仅可以提高用户体验度,从SEO方面考虑,也是非常重要的.今天,笔者在这里介绍一下在windows 2008下如何设置404错误页面. 注意:设置404有我这里介绍2种方式,推 ...

  5. ASP.NET中使用UpdatePanel时用Response输出出现错误的解决方法

    asp.net中执行到Response.write("xx");之类语句或Microsoft JScript 运行时错误: Sys.WebForms.PageRequestMana ...

  6. asp.net 中日期的格式化显示的方法

    在Asp.net 中经常使用日期,在不同的场合,对日期的显示方式有不同的要求,为此,自己总结了一些日期格式化的方式,仅供学习参考使用: C#格式化日期时间 DateTime dt = DateTime ...

  7. ASP.NET输出PNG图片时出现GDI+一般性错误的解决方法

    偶原来的用ASP.NET生成验证码图片时用的是JPG格式,今天想把它改成PNG格式的,结果就出现GDI+一般性错误,查了N久资料,才发现解决的办法,对分享此解决办法的网友深表感谢 Response.C ...

  8. VUE中集成echarts时 getAttribute of null错误

    错误 错误场景一: 错误提示: 在运行Vue项目时出现了上述错误,出现该错误的原因是Echarts的图形容器还未生成就对其进行了初始化所造成的,代码如下: // 基于准备好的dom,初始化echart ...

  9. 关于安装MongoDB4.0.9启动服务时显示connect failed错误的解决

    1.在安装完MongoDB4.0.9后在其/bin目录下打开CMD输入mongo测试服务是否开启,结果显示connect failed错误 解决方法: 出现这个错误的主要原因时因为在我们计算机的服务里 ...

随机推荐

  1. git管理和自动部署项目

    当一个项目需要纳入到版本控制的时候,选择的工具还是比较多的,最常见的就是工具有CVS,SVN,GIT等.在平时的开发中视情况而定,从来就没有最好的版本控制工具,只有最适合的工具.在这里我习惯用git来 ...

  2. Spark菜鸟学习营Day2 分布式系统需求分析

    Spark菜鸟学习营Day2 分布式系统需求分析 本分析主要针对从原有代码向Spark的迁移.要注意的是Spark和传统开发有着截然不同的思考思路,所以我们需要首先对原有代码进行需求分析,形成改造思路 ...

  3. cadence原理图绘制方法

    仅记录了绘制好原理图后的一些处理: 1 重写编写元件编号 1)Tool -> Annotate   在Packing选项卡中 的Action  选中 Reset part references ...

  4. [原创]PostgreSQL Plus Advince Server在 HA环境中一对多的Stream Replication配置(一)

    内容较多,开篇作为说明和目录. 实验环境规划:服务器:IBM x3500 m3三台其中两台用作HA,另外一台安装VMware ESXi安装两个虚机做Stream Replication.NAS存储IP ...

  5. 折腾了好久的macos+apache+php+phpmyadmin 终于成功了!

    由于最近需要布置mantis用来进行bug追踪,在此记录其过程. 由于PHP apache环境在Mac OS上是自带的,所以不需要另处下安装包,只需要简单配置一下即可. 首先打开终端输入命令: sud ...

  6. Notes of the scrum meeting(2013/10/23)

    ps:本来是10月23号周三下午开的会,这几天由于各种事情忙,忘记写博客了,现在补上. 软工项目组buaa_smile开始项目第一次scrum meeting meeting time:4:00~5: ...

  7. WebClient

    Mircsoft在dotnet1.1框架下提供的向 URI 标识的资源发送数据和从 URI 标识的资源接收数据的公共方法.通过这个类,大家可以在脱离浏览器的基础上模拟浏览器对互联网上的资源的访问和发送 ...

  8. textview点击后selector的pressed无效果

    原因: 需要配置  android:clickable="true" 这个跟开发环境有关,我之前用的android studio 就不需要这一项,默认可以点击. ********* ...

  9. android手机推送视频到服务端

    项目需求,android手机向服务器推送视频.苦战几个星期终于实现,现记录下来以免以后忘记. 没做过Java,也没做过Android开发,只能现学现卖.在网上找了下搭建开发a  ndroid环境资料, ...

  10. [原创] zabbix学习之旅七:如何远程操作被监控机器

    虽然我们已经创建了一个报警系统,但在实际场景中,运维人员从得到报警到实际解决问题有一定的时差,若业务系统没有做高可用,那业务不得不中断,对于某些要求严格的企业级环境,这是不可容忍的,那有没有方法能让z ...