zoukankan      html  css  js  c++  java
  • .net配置404错误页面

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

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

    第一步:配置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);  
                   }  
               }  
           }  
  • 相关阅读:
    PTA L1-002 打印沙漏 (20分)
    音乐研究
    LeetCode 155. 最小栈
    LeetCode 13. 罗马数字转整数
    LeetCode 69. x 的平方根
    LeetCode 572. 另一个树的子树
    errno错误号含义
    僵尸进程和孤儿进程
    TCP和UDP相关概念
    图相关算法
  • 原文地址:https://www.cnblogs.com/kongxiaoshuang/p/9401725.html
Copyright © 2011-2022 走看看