• asp.net自定义错误处理页面的几种方法。


    ASP.NET 提供三种用于在出现错误时捕获和响应错误的主要方法:Page_Error 事件、Application_Error 事件以及应用程序配置文件 (Web.config)。

    如果您不调用 Server.ClearError 或者捕获 Page_Error 或 Application_Error 事件中的错误,则将根据 Web.config 文件的 <customErrors> 部分中的设置处理错误。在 <customErrors> 部分,可将重定向页指定为默认的错误页 (defaultRedirect) 或者根据引发的 HTTP 错误代码指定特定页。您可使用此方法自定义用户收到的错误信息。
    尽管您可在 <customErrors> 部分中 defaultRedirect 属性的值中引用默认的错误页,但是您还可根据引发的 HTTP 错误代码指定要重定向到的特定页。<error> 子元素允许使用此选项
    <customErrors mode="On" defaultRedirect="ApplicationErroy.aspx">
        <error statusCode="403" redirect="403.htm"/>
        <error statusCode="404" redirect="404.htm"/>
        <error statusCode="500" redirect="500.htm"/>
    </customErrors>


    asp.net自定义错误处理页面方法一

    1、添加Web.config, < system.web>< /system.web>中添加< customErrors mode="On"

    defaultRedirect="ApplicationErroy.aspx" >< /customErrors>节点,

    2、添加错误处理页面:ApplicationErroy.aspx调用下面的方法:
    private void DealErroy()    
         {    
             HttpException erroy = new HttpException();    
             string strCode = erroy.ErrorCode.ToString();    
             string strMsg = erroy.Message;    
             erroy.HelpLink = "sss";    
             Response.Write("ErrorCode:" + strCode + "< br>");    
             Response.Write("Message:" + strMsg + "< br>");    
             Response.Write("HelpLink:" + erroy.HelpLink + "< br>");    
             Response.Write("Source:" + erroy.Source + "< br>");    
             Response.Write("TargetSite:" + erroy.TargetSite + "< br>");    
             Response.Write("InnerException:" + erroy.InnerException + "< br>");    
             Response.Write("StackTrace:" + erroy.StackTrace + "< br>");    
             Response.Write("GetHtmlErrorMessage:" + erroy.GetHtmlErrorMessage() + "< br>");    
             Response.Write("erroy.GetHttpCode().ToString():" + erroy.GetHttpCode().ToString() + "< br>");    
             Response.Write("erroy.Data.ToString()::" + erroy.Data.ToString() + "< br>");    
         }    
    这种方法不能完整地显示错误信息;

    asp.net自定义错误处理页面方法二(推荐)
    1、添加Web.config, < system.web>< /system.web>中添加< customErrors mode="On"

    defaultRedirect="ApplicationErroy.aspx" >< /customErrors>节点,

    2、添加Global.asax文件,找到Application_Error事件,加入以下代码:    

    //这是添加了一个全局应用程序类 在Application_Error事件中处理错误页面 和web.config没有关系 即使没有web.config 也是可以定位到错误页面

        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("../frmSysError.aspx");
             System.Web.HttpContext.Current.Response.Redirect(HttpContext.Current.Request.ApplicationPath + "/ApplicationErroy.aspx");
    }

    2、添加错误处理页面:ApplicationErroy.aspx 加入以下代码;

    protected void Page_Load(object sender, EventArgs e)
    {
            //显示程序中的错误码
       if (!IsPostBack)
        {
            //显示程序中的错误码
         if (Application["erroy"] != null)
                {
                    Response.Write(Application["erroy"].ToString());
                }
            }
        }

    这种方法能完整地显示错误信息,

    最好的办法还是两种方法一起用最好!

    另:web.config中也可以把
    <customErrors mode="On" defaultRedirect="ApplicationErroy.aspx">
        <error statusCode="403" redirect="403.htm"/>
        <error statusCode="404" redirect="404.htm"/>
        <error statusCode="500" redirect="500.htm"/>
    </customErrors>

    添加进去

    http错误代码含义:
    "403"    :    Forbidden    
    "404"    :    Not Found
    "500"    :    Internal Server Error

    方法三Page_Error事件
    Page_Error 事件提供一种捕获在页级别出现的错误的方法。您可以只是显示错误信息(正如下面的示例代码所示),也可以记录事件或执行某个其他操作。
    备注:此示例在浏览器中显示详细的错误信息,提供此示例只是为了进行说明。向应用程序的最终用户显示详细信息(尤其是该应用程序在 Internet 上运行时)一定要小心。更适当的做法是向用户显示一条消息,告知已发生错误,然后将具体的错误详细信息记录在事件日志中。
    本示例引发一个强迫错误发生在 Page_Load 事件中的空异常。按照以下步骤可创建将测试 Page_Error 事件的初始页。 1. 按照以下步骤将名为 PageEvent.aspx 的新文件添加到项目中: a. 打开 Microsoft Visual Studio .NET。
    b. 在"解决方案资源管理器"中,右键单击该项目节点,指向添加,然后单击添加 Web 窗体。
    c. 在名称文本框中,键入 PageEvent.aspx,然后单击打开。

    将以下代码添加到 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>

    从文件菜单中,单击保存 PageEvent.aspx。
    右键单击该页,然后单击在浏览器中查看以运行该页。请注意,将按照代码规范引发和报告错误。
    备注:您可能注意到代码发出对 Server.ClearError 的调用。这将防止错误继续到要被处理的 Application_Error 事件中。

    此外,您还应记下 @ Page 指令中的 Inherits 属性。如果已经设置 Inherits,则必须首先生成项目,然后再浏览到该页。如果不首先生成项目,将看到下面的错误信息: 'Project.PageEvent' is not a valid type

  • 相关阅读:
    使用systemctl管理指定服务需要做的配置
    挖矿病毒
    灰度发布系统
    血一般的教训,请慎用insert into select
    关于程序bug的闲谈
    来自一个网络监控软件的自述
    为什么CTO、技术总监、架构师都不写代码,还这么牛逼?
    原来 Elasticsearch 还可以这么理解
    爬了20W+条猫咪交易数据,它不愧是人类团宠
    NPUCTF2020 这是什么觅🐎
  • 原文地址:https://www.cnblogs.com/sontin/p/1929789.html
Copyright © 2020-2023  润新知