2014-01-28 68 views
5

我使用的是Windows 7,IIS 7.5,.NET 4.5。
(对于Windows 8,IIS 8.5,.NET 4.5,这是可行的)。如何阻止解码URL的IIS

执行与URL的GET请求:

http://my.host/api1/MyEntity('%2311282') 

问题是,当它到达服务器端代码%23炭已解码以“#” 和Uri对象认为它是一个片段炭。 Win8机器接收到带有char%23的url。

试过:
1)使用此配置在URL

http://my.host/api1/MyEntity('%2311282')/ 

3)卸载URL重写2模块的端部设置

<httpRuntime targetFramework="4.5" relaxedUrlToFileSystemMapping="true" /> 

2)添加 '/' - 并重新安装它。也尝试在web.config中为模块评论重写部分。

为什么我想复制Windows 8的行为 - 不解码URL。有任何想法吗?

+0

再次相当糟糕的标志伊莫。问题不一样。另一方面的答案只是说明它为什么在IIS 7.5上编码,而不是如何在IIS7.5上阻止它,就像询问当前的问题一样。 –

回答

4

看看重写模块。

一些信息here: 保原始URL

URL重写模块保留在以下服务器变量原请求的URL路径:

HTTP_X_ORIGINAL_URL - 这个服务器变量包含解​​码格式的原始URL; UNENCODED_URL - 此服务器变量包含的原始URL与Web客户端请求的原始URL完全相同,并保留了所有原始编码。

希望有帮助。

+0

我检查了Application_BeginRequest方法中的变量。他们在那里不存在。它有那里的“URL”变量和解码后的'#'字符。有任何想法吗?也许我看错了地方... – taminov

+0

http://www.iis.net/learn/extensions/url-rewrite-module/using-the-url-rewrite-module看看这个。通常重写规则放在web.config的相应部分 –

+0

(1)我试图注释掉标记。 (2)卸载url重写2(3)重新安装url重写2(4)取消注释重写部分。所有这些步骤都没有帮助。我认为问题在于URL重写。 – taminov