Uri.EscapeDataString在NUnit测试与asp.net webservice中的行为有什么不同?

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

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

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

事实certificate,差异是.Net 4.5的“怪癖”模式。 在asp.net应用程序中运行时,除非明确设置,否则.Net将尝试保持与先前版本的应用程序兼容性。

我进入框架代码,在UriParser中找到了一个怪癖设置。 谷歌搜索引导我阅读关于web.config中的元素的文章 。 接近尾声,它说:

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

一旦我将targetFramework="4.5"添加到我的web.config,Uri.EscapeDataString就像我预期的那样表现。