• .net三步配置错误页面,让你的站点远离不和谐的页面


    假设你的站点出现一堆让人看不懂的报错,那么你就不是一个合格的程序猿。也不是一个合格的站长。

    以下的方面能够帮助你的站点远离让人头大的页面。

    第一步:配置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>

     

    第二步:建立错误页面

    在站点根文件夹下建立404页面(找不到页面):404.html

    403页面(server禁止訪问):403.html

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

     

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

    在ErrorPages.aspx.cs中增加下面代码:

     

    [c-sharp] view plaincopy
    1. if (!IsPostBack)  
    2.        {  
    3.            HttpException erroy = new HttpException();  
    4.            string strCode = erroy.ErrorCode.ToString();  
    5.            string strMsg = erroy.Message;  
    6.            StringBuilder sb = new StringBuilder();  
    7.              
    8.            sb.Append("-----------记录開始时间:" + System.DateTime.Now+"-----------------<br>");  
    9.            erroy.HelpLink = Request.QueryString["aspxerrorpath"];  
    10.            sb.Append("ErrorCode:" + strCode + "<br>");  
    11.            sb.Append("Message:" + strMsg + "<br>");  
    12.            sb.Append("HelpLink:" + erroy.HelpLink + "<br>");  
    13.            sb.Append("Source:" + erroy.Source + "<br>");  
    14.            sb.Append("TargetSite:" + erroy.TargetSite + "<br>");  
    15.            sb.Append("InnerException:" + erroy.InnerException + "<br>");  
    16.            sb.Append("StackTrace:" + erroy.StackTrace + "<br>");  
    17.            sb.Append("GetHtmlErrorMessage:" + erroy.GetHtmlErrorMessage() + "<br>");  
    18.            sb.Append("erroy.GetHttpCode().ToString():" + erroy.GetHttpCode().ToString() + "<br>");  
    19.            sb.Append("erroy.Data.ToString():" + erroy.Data.ToString() + "<br>");  
    20.            sb.Append("----------记录结束----------------");  
    21.   
    22.            Response.Write(sb.ToString());  
    23.        }  

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

     

    另一种方法是在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文件里加入例如以下代码:

     

    [c-sharp] view plaincopy
    1. protected void Application_Error(Object sender, EventArgs e)  
    2.        {  
    3.            System.Configuration.Configuration config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~/Web.config");  
    4.            System.Web.Configuration.CustomErrorsSection customErrors = (System.Web.Configuration.CustomErrorsSection)config.GetSection("system.web/customErrors");  
    5.            if (customErrors != null && (customErrors.Mode == System.Web.Configuration.CustomErrorsMode.On || customErrors.Mode == System.Web.Configuration.CustomErrorsMode.RemoteOnly))  
    6.            {  
    7.                System.Web.HttpApplication app = (HttpApplication)sender;  
    8.                System.Exception lastError = app.Server.GetLastError();  
    9.                System.Web.HttpException httpEx = (HttpException)lastError;  
    10.                if (httpEx != null)  
    11.                {  
    12.                    int httpErrorCode = httpEx.GetHttpCode();  
    13.                    string redirect = customErrors.DefaultRedirect;  
    14.                    foreach (System.Web.Configuration.CustomError error in customErrors.Errors)  
    15.                    {  
    16.                        if (error.StatusCode == httpErrorCode) redirect = error.Redirect;  
    17.                    }  
    18.                    app.Server.ClearError();  
    19.                    app.Context.Response.StatusCode = httpErrorCode;  
    20.                    Server.Transfer(redirect);  
    21.                }  
    22.            }  
    23.        }  

    这样问题就得以攻克了。

  • 相关阅读:
    SQL Server 2008R2中取得详细日期到毫秒级
    SQL Server Analysis Services无法启动
    SQL Server 2008R2编写脚本时智能提示功能丢失的处理
    SQL Server使用Linkserver连接Oracle
    好用的eclipse快捷键
    今天项目出现的问题总结
    8.2微信小页面问题总结
    SpringBoot整合rabbitmq
    初学Netty(杰哥好久不见)
    消息队列RabbitMQ学习
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/5133166.html
Copyright © 2020-2023  润新知