异常处理方案的一个改进(兼论IE的一个局限性)

本文探讨了在IE浏览器中因地址栏URL长度限制导致的错误页面显示问题。作者分享了一个在网站异常处理中遇到的问题,即在IE下无法正确显示定制的错误页面,而在Firefox下则正常。问题根源在于错误信息被编码并附加到URL中,超过了IE地址栏的最大长度限制。文章提供了两种解决方案,一种是将错误信息编码并重定向,另一种是在响应中直接写入错误页面源代码。

  前面有篇随笔,记录了自己对网站异常的捕获和处理方式。但几天用下来,突然发现一个问题,就是在IE下有的时候不能显示正确的报错页面,而是显示那种一般在网络终端的时候才会出现的IE报错页面:

而同样的报错页面,在FireFox下却显示得很好,和设计预期一致:


下面贴出系统里在捕获了异常后执行的处理代码:

 1 None.gif public   static   void  ShowError( string  errMsg)
 2 ExpandedBlockStart.gifContractedBlock.gif dot.gif {
 3InBlock.gif    string localErr = "执行过程中出错,错误信息为:";
 4InBlock.gif    if (errMsg == null)
 5InBlock.gif    localErr += "";
 6InBlock.gif    else
 7InBlock.gif    localErr += errMsg;
 8InBlock.gif
 9InBlock.gif    localErr = HttpContext.Current.Server.UrlEncode(localErr);
10InBlock.gif    HttpContext.Current.Response.Redirect(string.Format("~/ShowError.aspx?ErrString='{0}'", localErr), true);
11InBlock.gif    HttpContext.Current.Response.End();
12ExpandedBlockEnd.gif}

 看到上面的代码段,我想一些Web开发经验比较丰富的朋友已经看出问题来了。是的,在这里,出错信息是被加到Url里传递给出错页面的,但IE的地址栏所能支持的字符串长度是很有限的!我自己试了一下,在IE7的地址栏里只能输入不超过2048个英文字符,看微软的介绍,应该是2083个,总之相差不大。其实,对于Response.Redirect($url)方法,以前知道使用它相当于从客户端重新请求$url,但以为仅仅是“相当于”,其实还是服务器上面的直接跳转。但通过把过长报错字符串传递给$url所看到的IE中的反应,这里其实就是从客户端重新发出了请求。知道了问题,解决起来就很容易了,把上面的代码修改如下即可:

 1 None.gif public   static   void  ShowError( string  errMsg)
 2 ExpandedBlockStart.gifContractedBlock.gif dot.gif {
 3InBlock.gif    string localErr = "执行过程中出错,错误信息为:";
 4InBlock.gif    if (errMsg == null)
 5InBlock.gif    localErr += "";
 6InBlock.gif    else
 7InBlock.gif    localErr += errMsg;
 8InBlock.gif
 9InBlock.gif    string errPageSource = string.Format(ErrorPageTemplate, localErr);
10InBlock.gif    HttpContext.Current.Response.Write(errPageSource);
11ExpandedBlockEnd.gif}

12 None.gif

转载于:https://www.cnblogs.com/xingyukun/archive/2007/07/12/815683.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值