在IE上,ASP.NET回调到带有UTF字符的编码URL失败

时间:2010-01-04 17:36:25

标签: asp.net ajax internet-explorer asp.net-ajax blogengine.net

我有使用BlogEngine.NET 1.5构建的俄语博客。

我在URLEncode编码的链接中使用俄语单词,因此在大多数浏览器中链接都是人类可读的 - FF,Chrome,Opera(IE除外,但这不是这个浏览器的真正问题)。这个想法不是我的,我从维基百科借用它 - 它在本地化网站上使用编码的URL。

真正的问题是,当我尝试在IE8中添加注释时,它失败了(并且只在生产机器上,开发环境正常工作)。

使用Fiddler我发现IE尝试使用WebForm_DoCallback将AJAX回调发送到错误的地址 - 似乎它解码URL,获取错误的字符并从服务器询问带有错误地址的页面,并且(当然)收到404.

以下是来自IE的错误请求在Fiddler中的显示方式:

POST /ru/post/�������������-�����.aspx HTTP/1.1

以下是FF如何发出相同请求并获得正确答案:

POST /ru/post/%D0%92%D1%81%D1%82%D1%83%D0%BF%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5-%D1%81%D0%BB%D0%BE%D0%B2%D0%BE.aspx HTTP/1.1

我将解决方案从默认的ASP.NET 2.0 for BE升级到ASP.NET 3.5,但这没有任何改变。

请注意,我在BE中进行了一些小的更改,以允许正确编码的UTF链接 - 默认情况下,它会从链接中删除百分比符号。

有谁可以告诉我这里的IE行为有什么问题以及如何解决? 为什么ASP.NET开发下的开发环境与IIS6下的生产机器不同? 为什么IE不解码地址栏中的链接(像其他浏览器一样),但在提出请求时是否这样做?

1 个答案:

答案 0 :(得分:0)

article可能会有所帮助。

从解释IE做什么的文章中:

  

如果不是,网络浏览器会做什么   在中找到任何Content-Type   http标头或元标记?   Internet Explorer确实如此   一些非常有趣的东西:尝试   根据频率来猜测   典型的各种字节出现   各种典型编码中的文字   语言,什么语言和编码   被使用了。因为各种老8   位代码页往往会把他们的   不同范围内的国家级字母   介于128和255之间,因为每一个   人类语言有所不同   特征字母直方图   用法,这实际上有机会   工作

确保网页头部中的第一个元标记包含以下内容:

<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">