我正在尝试配置我的 IIS 7.5 以允许 ASP.NET 的 URL 中使用特殊字符。这对于在新系统上支持广泛使用的旧版 URL 非常重要。
示例网址:http://mydomain.com/FileWith%inTheName.html 这将在 URL 中编码并请求为http://mydomain.com/FileWith25%inTheName.html
这很简单,在 IIS 7.5 中创建一个新的网站时,将一个文件名中带有百分号的文件放在网站根目录中,然后将浏览器指向该文件。
这确实不是但是,当网站是 ASP.NET 应用程序时,它才能正常工作。当指向该 URL 时,ASP.NET 总是从处理程序的模块400.0 - Bad Request
中返回错误。但是,它正确显示请求的 URL,并正确解析到正确的物理文件(服务器错误页面中“物理路径”字段的信息指向物理上可用的文件)。WindowsAuthentication
StaticFile
有关于如何启用此功能的提示,因此我一步一步地按照这些网站上的说明进行操作:
- 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 应用程序运行它。是的:我在应用注册表更改后重新启动了。
那么,除了以上帖子中描述的设置之外,我还需要做什么来支持包含百分比字符的旧版 URL?
附加信息:应用程序池模式已集成。
推几天后。没人知道吗?
答案1
我也遇到过这种情况,在对 Windows 注册表进行所有修改后,我和你一样陷入了困境。将应用程序池模式更改为经典模式后,问题就解决了。
答案2
除非位于“/”和“/”之间以及“?”之前的 & 符号是 URI 和 URL 的逻辑运算符,直到定义它们的 RFC。您必须非常努力才能使用类似以下内容的东西:
/request/to/path/?queryvar=value#nextval=value#next=val
并不是:
/request/to/path/?queryvar=value&nextval=value
url_encoded 值和原始 ascii 表示效果很好,例如 RHO 可充当 ASP.NET 网关过滤器。通常,当我编写 ASP.NET 代码时,除非是核心配置模块或插件,否则我几乎从不使用 IIS。ASP.NET 在 API 中支持完整状态覆盖。
几乎所有带有 Web API 的语言都自然支持 url 编码字符的转换。编写一个小类来处理网关请求并解析请求字符串是处理特殊符号的更简单的方法,比在注册表中摆弄 IIS 更简单。
请记住高级字符限制可能会导致缓冲区溢出。确保高位字符和特定重复字符不允许溢出异常。您可以输入超过 U+1000 的字母 a,但对于分层请求,您真正需要的只是 U+0097 或其倍数。