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

时间:2016-12-06 23:33:30

标签: c# .net encoding percent-encoding

我正在使用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上其他地方(hereherehere和过多讨论的RFC 3986问题的影响网周围的其他地方。)

1 个答案:

答案 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的行为与我预期的一样。