我在类库项目中有以下代码(Url 已被简化,但仍演示相同的行为):
Uri oUri = new Uri("https://xzyserver.com/MyFolder%2FMyPage?querystring");
我发现 System.Uri 类在本地与在 Azure Worker Role 中以不同的方式对我的 Urls 进行转义。
如果类库在桌面应用程序中运行 oUri.AbsoluteUri 返回与在 Azure 中运行的不同的值(在计算模拟器和生产工作者角色中):
本地 = MyFolder%2FMyPage?querystring
InAzure = MyFolder/MyPage?querystring
(我不得不删除上面两行中 URL 的开头,因为 Stack Overflow 告诉我帖子中有太多链接)
本地行为是我需要的(作为第三方身份验证过程的一部分,安全令牌是根据请求 Uri 和请求正文的其他部分计算的,这种转义会破坏该过程)。Uri 与 System.Net.Http 命名空间中的类一起使用。
我已经尝试过 Uri 构造函数(sUri,bDontEscape)的过时形式,但这没有任何区别。
此外,行为似乎不一致 - 我还尝试了以下方法:
Uri oUri = new Uri("https://xzyserver.com/MyFolder%252FMyPage?querystring");
但是,转义似乎只适用于 %2F 到“/”,%25 没有转义回“%”,而是 oUri.AbsoluteUri 返回完整的原始 URL,没有转义。
这是一个已知/记录的问题吗?我可能错过了任何简单的解决方法?
PS。System.Net.Http 命名空间中的类在其许多构造函数中采用 Uri 对象或字符串 Uri,但同样的问题适用于两者。我希望这些类只是为基于字符串的重载创建一个 Uri。