我正在使用Uri.EncodeDataString在网址上发送查询字符串。原始字符串是: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上其他地方(here,here,here和过多讨论的RFC 3986问题的影响网周围的其他地方。)
答案 0 :(得分:0)
最后,我确实受到了RFC 3986问题的影响。
事实证明,区别在于#34;怪癖" .Net 4.5的模式。在asp.net应用程序中运行时,除非明确设置,否则.Net将尝试保持应用程序与先前版本的兼容性。
我进入框架代码并在UriParser中找到了一个怪癖设置。谷歌搜索引导我到this article关于web.config中的<httpruntime>
元素。接近结束时,它说:
&#34;如果没有
<httpRuntime targetFramework>
属性 Web.config,我们假设应用程序需要4.0怪癖 。行为&#34;
我将targetFramework="4.5"
添加到我的web.config后,Uri.EscapeDataString的行为与我预期的一样。