Uri.EscapeDataString 在 NUnit 测试中的行为与 asp.net 网络服务不同?

Uri.EscapeDataString behaves different in NUnit test vs. asp.net webservice?

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

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

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

事实证明,区别在于 .Net 4.5 的 "quirks" 模式。当 asp.net 应用程序中 运行 时,除非明确设置,.Net 将尝试保持应用程序与以前版本的兼容性。

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

"If there is no <httpRuntime targetFramework> attribute present in Web.config, we assume that the application wanted 4.0 quirks behavior."

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