Asp.net错误->友好处理
有些错误和异常是程序员无法控制的,如:
- 网络不可用
- 服务器崩溃
- 服务器超负荷
- 客户端请求的页面不存在或者没有权限
- 服务器出现了不可预知的异常,而该异常没有被catch
这些导致无法为客户端正确的提供服务,做为程序员,我们有责任为用户展现友好的自定义错误页面。
学习到的三个方法。
一、webconfig中进行配置
webconfig代码
<system.web>
<customErrors mode="RemoteOnly"defaultRedirect="GenericErrorPage.htm">
<error statusCode="403" redirect="NoAccess.htm" />
<error statusCode="404" redirect="FileNotFound.htm" />
</customErrors>
</system.web>
<customErrors>元素的defaultRedirect属性指向的页面是发生错误时指向远程用户的默认页面,通过配置<error>子节点可以错误按照错误类型redirect到特定的错误页面。
mode属性的取值有三个
1、RemoteOnly,自定义的错误页面值发送给远程用户,当在服务器本地操作出现错误时,程序还是会返回红条或者黄条,也就是最原始的那种错误信息。
2、On,不管是远程用户还是服务器本地访问的用户,出现错误时都会跳转至自定义的错误页面。
3、Off,完全禁用此功能。返回最原始的那种错误信息
(注:这三个属性都是大小写敏感的,首字母大写)。
二、Application_Error事件
当异常未被捕获的时候,Asp.net就会触发HttpApplication类的Error事件,可以通过Global.asax文件的Application_Error事件来订阅该事件。
代码
void Application_Error(object sender, EventArgs e)
{
// 在出现未处理的错误时运行的代码
HttpUnhandledException eHttp = this.Server.GetLastError() as HttpUnhandledException;
Exception eApp = eHttp.InnerException;//可以返回异常
Response.Redirect("Default3.aspx?exe='"+Server.UrlEncode(eApp.Message)+"'");
Server.ClearError();
Response.End();
}
三、Page的ErrorPage属性
在页面的处理过程中,可以在任何时候设置或者获取Page.ErrorPage属性,能够通过程序的方式指定异常未被捕获时,Asp.net会将客户端重定向到那个页面。
这个有两种设置方法,一种是直接在Page属性里边设置,为某个页面设置统一的错误页面。
<%@ Page Language="C#" ErrorPage="~/Default2.aspx" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
也可以在程序中动态的设置,假如页面中有n个button,可以为每个button设置特定的ErrorPage
protected void btnTest_Click(object sender, EventArgs e) { this.ErrorPage = "Default2.aspx"; }
该属性是和<customErrors>配置元素配合起来才会起作用。为了使Page.ErrorPage起作用,<customErrors>的mode属性必须设置为On。
在异常未被捕获的时候,如果没有设置ErrorPage,那么HttpApplication.Error事件。如果HttpApplication.Error没有订阅错误事件,那么程序会去找<customErrors>配置的元素(如果可以的话)。
优先级:ErrorPage属性,Application_Error、<customErrors>配置,如果多个错误的机制同时存在,应用程序会按照优先级找到第一个满足条件的错误机制。

浙公网安备 33010602011771号