最近遇到一个很莫名的问题:
在请求的地址的参数中的中文值为奇数时,外部引用样式、图片和iframe全部出错!!
比如:http://xxx.xxx.com/xx.aspx?key=写字楼
但在中文值为偶数时又一切正常。 比如:http://xxx.xxx.com/xx.aspx?key= 写字
条件是在IE安装了Microsoft VM的情况下,即在internet选项里的高级出现“ Microsoft VM ”选项的IE才会出现这个问题; 其他IE和FF等浏览器没有这个问题。
站点是配置在WINDOWS2008的IIS7上的,池使用的是经典模式。
在这个情况下整个页面错乱,样式丢失,图片不存在,IFRAME出现505内部服务器错误,不堪目睹。
后来调整为集成模式,效果有所改善:外部引用样式效果可以了,本站点的图片也出来了,但外部站点的图片仍是不行,IFRAME出现错误提示:
在多字节的目标代码页中,没有此 Unicode 字符可以映射到的字符。 (异常来自 HRESULT:0x80070459)
“/”应用程序中的服务器错误。
在多字节的目标代码页中,没有此 Unicode 字符可以映射到的字符。 (异常来自 HRESULT:0x80070459)
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.ArgumentOutOfRangeException: 在多字节的目标代码页中,没有此 Unicode 字符可以映射到的字符。 (异常来自 HRESULT:0x80070459)
源错误:
行 30: //Context.Response.Write(Context.Request.Headers); |
调试时发现在HttpContext Context = HttpContext.Current;时就出错了,整个 Context对象错误。
这是在application.BeginRequest事件时的一个方法,在访问当前页时没问题,但在本页的其他引用(图片、IFRAME引用时)就出现错误了,几乎是 Context 对象错误 。
既然这个对象出错,就TRY一下:
try
{
Context = HttpContext.Current;
//Context.Response.Write(Context.Request.Headers);
//Context.Response.End();
CurrentUrl = Context.Request.Url.OriginalString.Replace(":80/", "/").ToLower();
}
catch { return; }
这样本站的图片、样式和IFRAME在IIS7的集成模式下,可以成功访问了,但外部站点的图片仍是无法显示。
当然即使代码加上TRY在集成模式下可以的,一切换成经典仍是样式、图片、IFRAME无法正常显示,一样的错误。
不知道其他朋友有没有遇到过这个问题。
这个错误,不论是经典还是集成模式,只有 装了 Microsoft VM的IE 才会出现,
其他IE6/7/8及FF都是可以正常访问的。