如果你的网站出现一堆让人看不懂的报错,那么你就不是一个合格的程序员,也不是一个合格的站长。

下面的方面可以帮助你的网站远离让人头大的页面。

第一步:配置web.config

打开web.config,在<system.web>节点下添加如下代码:

<customErrors mode="On" defaultRedirect="ErrorPages.aspx">
            <error statusCode="403" redirect="403.html" />
            <error statusCode="404" redirect="404.html" />
  </customErrors>

或者可是用以下方法配置:

1.进入web.config 找到httpErrors 按照下面设置

<httpErrors errorMode="DetailedLocalOnly" defaultResponseMode="File" >
<remove statusCode="404" />
<error statusCode="404" path="/404.aspx" responseMode="ExecuteURL" />
</httpErrors>

2.找到 system.web 节点,在 customErrors 节点中添加 mode 为 on
(注:我们网站是在config/CustomErrors.config 这里把model值改为On 就行了)

<?xml version="1.0" encoding="utf-8"?>
<customErrors mode="On" defaultRedirect="404.aspx">
<error statusCode="404" redirect="404.aspx" />
<error statusCode="403" redirect="404.aspx" />
<error statusCode="500" redirect="404.aspx" />
</customErrors>

第二步:建立错误页面

在网站根目录下建立404页面(找不到页面):404.html

403页面(服务器禁止访问):403.html

这样就可以解决一部分问题,但是如果我们程序有些bug,碰巧被用户发现,那么还是会返回给用户一个不友好的报错页面。所以我们还要建立一个ErrorPages.aspx捕捉那些我们不知道的错误页面,用以处理那些报错,显示给用户良好的页面。

第三步:捕捉未知错误,显示友好提示信息。

在ErrorPages.aspx.cs中加入以下代码:

if (!IsPostBack)
{
HttpException erroy = new HttpException();
string strCode = erroy.ErrorCode.ToString();
string strMsg = erroy.Message;
StringBuilder sb = new StringBuilder(); sb.Append("-----------记录开始时间:" + System.DateTime.Now+"-----------------<br>");
erroy.HelpLink = Request.QueryString["aspxerrorpath"];
sb.Append("ErrorCode:" + strCode + "<br>");
sb.Append("Message:" + strMsg + "<br>");
sb.Append("HelpLink:" + erroy.HelpLink + "<br>");
sb.Append("Source:" + erroy.Source + "<br>");
sb.Append("TargetSite:" + erroy.TargetSite + "<br>");
sb.Append("InnerException:" + erroy.InnerException + "<br>");
sb.Append("StackTrace:" + erroy.StackTrace + "<br>");
sb.Append("GetHtmlErrorMessage:" + erroy.GetHtmlErrorMessage() + "<br>");
sb.Append("erroy.GetHttpCode().ToString():" + erroy.GetHttpCode().ToString() + "<br>");
sb.Append("erroy.Data.ToString():" + erroy.Data.ToString() + "<br>");
sb.Append("----------记录结束----------------"); Response.Write(sb.ToString());
}

到此为止:网站错误配置完成。当然错误处理页面你可以随意定义,你可以把捕捉到的错误写入数据库或者文件,只显示一些提示信息给用户,你也可以把错误信息处理后友好的显示给用户。

还有一种方法是在Global.asax中的void Application_Error(object sender, EventArgs e)方法中定义;现给以大体方法,具体操作可以根据实际情况给以修改。

在Global.asax文件中修改:

void Application_Error(object sender, EventArgs e)
    {
        //在出现未处理的错误时运行的代码
        Exception erroy = Server.GetLastError();
        string err = "出错页面是:" + Request.Url.ToString() + "</br>";
        err += "异常信息:" + erroy.Message + "</br>";
        err += "Source:" + erroy.Source + "</br>";
        err += "StackTrace:" + erroy.StackTrace + "</br>";
        //清除前一个异常 
        //Server.ClearError();
        //此处理用Session["ProError"]出错。所以用 Application["ProError"] 
        Application["erroy"] = err;
        //此处不是page中,不能用Response.Redirect("../ErrorPages.aspx");
        System.Web.HttpContext.Current.Response.Redirect(HttpContext.Current.Request.ApplicationPath + "/ErrorPages.aspx");

}

在ErrorPages.aspx.cs文件中修改

protected void Page_Load(object sender, EventArgs e)
    {
        //显示程序中的错误码

if (!IsPostBack)
        {

//显示程序中的错误码

if (Application["erroy"] != null)
            {

Response.Write(Application["erroy"].ToString());

}

}

}

补充:使用上述方法实现的跳转,返回的HTTP状态码全部是302,本来应该返回404的也给返回302.这样对搜索引擎优化很不利。所以我们应该在Global.asax文件中添加如下代码:

protected void Application_Error(Object sender, EventArgs e)
{
System.Configuration.Configuration config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~/Web.config");
System.Web.Configuration.CustomErrorsSection customErrors = (System.Web.Configuration.CustomErrorsSection)config.GetSection("system.web/customErrors");
if (customErrors != null && (customErrors.Mode == System.Web.Configuration.CustomErrorsMode.On || customErrors.Mode == System.Web.Configuration.CustomErrorsMode.RemoteOnly))
{
System.Web.HttpApplication app = (HttpApplication)sender;
System.Exception lastError = app.Server.GetLastError();
System.Web.HttpException httpEx = (HttpException)lastError;
if (httpEx != null)
{
int httpErrorCode = httpEx.GetHttpCode();
string redirect = customErrors.DefaultRedirect;
foreach (System.Web.Configuration.CustomError error in customErrors.Errors)
{
if (error.StatusCode == httpErrorCode) redirect = error.Redirect;
}
app.Server.ClearError();
app.Context.Response.StatusCode = httpErrorCode;
Server.Transfer(redirect);
}
}
}

.net配置404错误页面的更多相关文章

  1. nginx下配置404错误页面

    1.创建自己的404.html页面,并放于网站根目录. 2.更改nginx.conf在http定义区域加入: fastcgi_intercept_errors on; 3.更改nginx.conf(或 ...

  2. NGINX 配置404错误页面转向

    什么是404页面 如果碰巧网站出了问题,或者用户试图访问一个并不存在的页面时,此时服务器会返回代码为404的错误信息,此时对应页面就是404页面.404页面的默认内容和具体的服务器有关.如果后台用的是 ...

  3. NGINX下配置404错误页面的方法分享

    NGINX下配置自定义的404页面是可行的,而且很简单,只需如下几步,需要的朋友可以参考下   1. 创建自己的404.html页面 2.更改nginx.conf在http定义区域加入: fastcg ...

  4. NGINX 配置404错误页面转向

    什么是404页面 如果碰巧网站出了问题,或者用户试图访问一个并不存在的页面时,此时服务器会返回代码为404的错误信息,此时对应页面就是404页面.404页面的默认内容和具体的服务器有关.如果后台用的是 ...

  5. nginx中配置404错误页面的教程

    什么是404页面如果网站出了问题,或者用户试图访问一个并不存在的页面时,此时服务器会返回代码为404的错误信息,此时对应页面就是404页面.404页面的默认内容和具体的服务器有关.如果后台用的是NGI ...

  6. iis7+php5.6配置404错误页面的问题

    打开错误页,如图1 图1 1.刚开始选择的是“在此网站上执行URL”,/404.html页面可以显示出来,但返回的状态是200,对seo不友好,这样生成的的web.config配置文件如下: < ...

  7. Ubuntu nginx 配置404错误页面

    1.创建自己的404.html页面: 2.更改nginx.conf在http定义区域加入: /etc/nginx# vim nginx.conf 下添加 fastcgi_intercept_error ...

  8. Nginx配置error_page 404错误页面

    问题由来 昨天一网友在segmentfault.com上提问,无法做404重定向 打开对方的网站随便输入一个错误的地址发现给出了404代码,但是页面完全空白,并没有显示404页面的设定内容 当时就明白 ...

  9. java web 404错误页面配置

    java web 404错误页面配置:注意红框的地方,在工程的web.xml文件里的最开头加入如下的内容便可,但是也有问题,针对以.action后缀名和.jsp后缀名不起作用, 因为后面配置了一些拦截 ...

随机推荐

  1. ubuntu开启SSH服务远程登录

    http://blog.csdn.net/jackghq/article/details/54974141 ubuntu开启SSH服务远程登录

  2. Spring 父子容器

    必须要说的是,父子容器是通过设置形成的关系. 容器实现了 ConfigurableApplicationContext 或 ConfigurableBeanFactory 接口,这两个接口中分别有se ...

  3. error: expected declaration specifiers or '...' before 'xxxx'(xxxx是函数形参)

    今天汗颜了一大阵 早上,在编译我的源代码的时候竟然不通过编译,上个星期六也出现了这种情况,当时不知道怎么弄的后来又通过编译了,可能是原来的.o文件没有make clean 还保存在那里,以至于蒙过去了 ...

  4. tiny210V2开发板hdmi输出到10.1寸LCD,无图像

    tiny210V2开发板hdmi输出到10.1寸LCD,无图像... 用tiny210V2开发板的HDMI接口输出到的10.1寸LCD,LCD无任何现象.说明一下我的情况,我的10.1寸屏LCD是HD ...

  5. 从头认识java-18.2 主要的线程机制(7)join

    这一章节我们来讨论一下join. 1.什么是join? 阻塞当前线程,让.join的线程先做完.然后再继续当前线程 以下是api的解释: A.join,在API中的解释是,阻塞当前线程B,直到A运行完 ...

  6. CentOS 6.5 下Vim 配置图解

    分享个CentOS 6.5 下Vim 配置图文详解,希望对大家有所帮助. 1. 登录并进入你常用的用户名下,查看其主目录 命令: # su xxx $ cd xxx $ ls -a 2.查看并建立目录 ...

  7. Java Error: java.lang.UnsupportedClassVersionError: ...bad major version at offset=6

    问题分析 报这个错误是指你的jar包或者class 的被编译的jdk版本比当前runtime的jdk版本高. 首先,确定你当前的运行版本: Java代码   Java -version java ve ...

  8. delphi中设置listview行高的方法

    第一步.在form中放置一个ImageList: 第二步.将ListView的SmallImages设置为第一步中放置的ImageList: 第三部.将imageList的height设置成自己需要的 ...

  9. linux环境下,清空history中记录的历史命令

    需求描述: 今天在数据库主机上操作,通过history看到有刚操作过的历史记录,想把这个清除了, 但是,还不影响后续的命令记录,所以查了下,在此记录. 操作过程: 1.通过history -c命令,完 ...

  10. 如何通过phoenix中查看表的主键信息

    需求描述: 今天一个开发的同事让帮忙查看下表的主键列,在此记录下. 操作过程: 1.通过!primarykeys命令查看表的主键 !primarykeys SYNC_BUSINESS_INFO_BYD ...