1

我正在使用Uri.EncodeDataString在 URL 上发送查询字符串。原始字符串是:Photo($select=Name,Id) 在我的 VS2015 调试器中运行的 asp.net Web 服务中,Uri.EncodeDataString 将返回:Photo(%24select%3DName%2CId) 但是,在 VS2015 中的 Resharper 测试运行器下运行的 NUnit 测试中,它返回:Photo%28%24select%3DName%2CId%29。注意括号编码的不同。

为什么括号在单元测试中编码,而不是在 Web 服务中?括号不应该在 Web 服务中编码吗?我在 .Net 4.6 下运行,所以我不应该受到 StackOverflow 上其他地方讨论的 RFC 3986 问题的影响(这里这里这里以及网络上的许多其他地方)。

4

1 回答 1

0

最后,我确实受到了 RFC 3986 问题的影响。

事实证明,不同之处在于 .Net 4.5 的“怪癖”模式。在 asp.net 应用程序中运行时,除非明确设置,否则 .Net 将尝试保持应用程序与以前版本的兼容性。

我进入框架代码并在 UriParser 中发现了一个古怪的设置。谷歌搜索让我看到了这篇关于<httpruntime>web.config 中元素的文章。接近尾声时,它说:

“如果 Web.config 中没有<httpRuntime targetFramework>属性,我们假设应用程序需要 4.0 怪癖行为。”

添加targetFramework="4.5"到 web.config 后,Uri.EscapeDataString 的行为与我预期的一样。

于 2016-12-09T19:40:48.290 回答