如何configurationIIS 7.5以允许URL中的特殊字符用于ASP.NET 3.5?

我正在尝试configuration我的IIS 7.5,以允许特殊字符在ASP.NET的url中。 这对于在新系统上支持广泛的传统url很重要。

示例url: http : //mydomain.com/FileWith%inTheName.html这将被编码在url和要求为http://mydomain.com/FileWith25%inTheName.html

在IIS 7.5中创build一个新的Web时,这样做很简单,在Web根目录中的文件名中放置一个带百分号的文件,并将浏览器指向它。

但是,当网站是ASP.NET应用程序时,这不起作用。 指向该URL时,ASP.NET总是从StaticFile处理程序返回WindowsAuthentication模块中的400.0 - Bad Request错误。 然而,它正确地显示请求的URL,并正确地parsing正确的物理文件(来自服务器错误页面的“物理path”字段的信息指向物理上可用的文件)。

有关如何启用这个提示,所以我按照这些网站上的指示一步一步:

  • http://dirk.net/2008/06/09/ampersand-the-request-url-in-iis7/
  • http://adorr.net/2010/01/configure-iis-to-accept-url-with-special-characters.html

第二个实际上总结了第一篇文章中的信息,并添加了一些关于x64系统的更多信息(我们正在运行x64)以及一个额外的web.config的变化。 我尝试了所有这些,仍然无法从一个asp.net web应用程序运行。 是的:我应用registry更改后重新启动。

那么,除了上述文章中描述的设置之外,还需要做些什么来支持包含百分比字符的传统url?

附加信息:应用程序池模式已集成。

后几天。 不知道有人吗?

在对Windowsregistry进行所有修改之后,我发现自己被困住了。 一旦我将应用程序池模式更改为Classic,问题就被修复了。

除非在“/”和“/”之间以及在“?”之前,符号符号 符号是URI和URL的逻辑运算符,直到定义它们的RFC。 你将不得不努力工作,使用像这样的东西:

 /request/to/path/?queryvar=value#nextval=value#next=val 

并不是:

 /request/to/path/?queryvar=value&nextval=value 

url_encoded的值和原始的ascii表示工作得很好,例如一个充当ASP.NET网关filter的RHO。 一般来说,当我编写ASP.NET代码时,除非是核心configuration模块或插件,否则几乎不会使用IIS。 ASP.NET在API中支持全状态覆盖。

几乎所有使用web API的语言都支持翻译url编码的字符。 编写一个处理你的网关请求和分析你的请求string的小类是处理特殊符号比在registry中处理IIS更简单的方法。

请记住可能导致缓冲区溢出的高级字符限制。 确保高位字符和特定重复字符不允许溢出exception。 你可以input一个过去的U + 1000的字母,但是你只需要在U + 0097或它的倍数就可以得到一个分层的请求。