注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

我只是一个人

我爱一个人

 
 
 

日志

 
 

asp.net中异常获取与处理  

2011-04-06 20:19:50|  分类: 网页制作--技巧| |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

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>");    

     }       

  

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

 

 

 

 附加

 

 protected void Page_Error(object sender, EventArgs e)
    {
        Exception ex = Server.GetLastError();
        if (ex is HttpRequestValidationException)
        {
            Response.Write("<script>alert('请勿在页面中输入非法字符。如:html标记,javascript脚本')</script>");
            Server.ClearError(); // 如果不ClearError()这个异常会继续传到Application_Error()。
        }

        Response.Write("<script>parent.location.href=''</script>");
    }

在页面处理数据回发时携带html和js脚本的信息时候会引发HttpRequestValidationException异常
在非必要提交这些信息时候请勿将validateRequest="false"
简单了事,在页面上写下如下代码来获取异常


如何在地址后边追加javascript脚本使这个页面能弹出对话框?

在页面上如果文本框等含有html,javascript等字眼时,如果数据回发边会引发HttpRequestValidationException异常,如果确定要
回发该类信息,则将validateRequest="false"就可以,否则设置 protected void Page_Error(object sender, EventArgs e)事件
获取异常提示用户

通过url读取一个网页上的所有连接,并分清站内连接,站外连接,和死链接

 

在页面上如果文本框等含有html,javascript等字眼时,页面无刷新面板中的linkButton按钮不在回发(他是通过后台回发,但是不会做任何改变)

 

  评论这张
 
阅读(478)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018