【问题标题】:How to stop IIS from decoding URL [duplicate]如何阻止 IIS 解码 URL [重复]
【发布时间】:2014-02-20 05:05:12
【问题描述】:

我使用 Windows 7、IIS 7.5、.NET 4.5。
(对于 Windows 8、IIS 8.5、.NET 4.5,这有效)。

使用 URL 执行 GET 请求:

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

问题是当它到达服务器端代码时,%23 字符已经被解码为 '#' 并且 Uri 对象认为它是一个片段字符。 Win8 机器接收到 char %23 untouched 的 url。

尝试:
1)使用此配置设置

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

2) 在网址末尾添加“/”

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

3) 卸载 url rewrite 2 模块 - 并重新安装它。还尝试在 web.config 中为模块注释 rewrite 部分。

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

【问题讨论】:

  • 又一次相当糟糕的 dup 标志 imo。问题不一样。另一个答案只说明了为什么它在 IIS 7.5 上编码,而不是如何在 IIS7.5 上防止它,就像问当前问题一样。

标签: asp.net url iis url-routing


【解决方案1】:

看看重写模块。

一些信息here: 保留原始网址

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

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

希望有帮助。

【讨论】:

  • 我检查了 Application_BeginRequest 方法中的变量。他们在那里不存在。它有一个“URL”变量,里面有解码的“#”字符。有任何想法吗?也许我看错地方了……
  • iis.net/learn/extensions/url-rewrite-module/… 看看这个。通常重写规则放在 web.config 的适当部分
  • (1) 我试图注释掉 标签。 (2) 卸载了 url rewrite 2 (3) 重新安装了 url rewrite 2 (4) 取消了 rewrite 部分的注释。所有这些步骤都没有帮助。我认为问题不在于 url 重写。
  • 如果你有兴趣,这是windows中的一个bug:stackoverflow.com/questions/21597059/…
  • @taminov,Eugen P. 解决方案确实有效,这些服务器变量确实存在于 URL 重写模块中,但可能不存在于 asp.net 服务器代码中。因此,您可能必须在 URL Rewrite 模块中使用它们,例如添加包含 {UNENCODED_URL} 值的自定义请求标头。然后,您应该能够访问 .Net 代码中的自定义请求标头。 (是的,变量名很容易误导,应该是UNDECODED_URLimo。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-14
  • 2018-01-01
  • 2013-01-14
  • 1970-01-01
  • 2023-04-08
  • 2011-06-20
  • 1970-01-01
相关资源
最近更新 更多