Cha*_*has 2 .net-core .net-core-1.1
使用此代码...
using (HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get,
"https://example.com/?var=a%3Ab%3Dc%26d%3Fe")
{
// Do stuff
}
Run Code Online (Sandbox Code Playgroud)
...request.RequestUri现在具有值“ https://example.com/?var=a:b%3Dc%26d%3Fe ”
请注意 %3A 已取消编码为冒号字符,但所有其他编码字符仍保持编码状态。
如何防止 %3A 像所有其他编码字符一样被取消编码?
对于上下文,我正在调用外部 API。冒号抛出错误。我无法控制外部 API,因此需要找到一种符合 API 编码期望的方法。
我认为行为描述得有点离奇,所以我决定测试此我自己,而其实在.NET框架4.5.1和4.7.1,将%3A被解码成:由HttpRequestMessage类。
但是,在 .NET Core 2.1.401 中,如果原始字符串保持不变,则不会发生相同的行为。
因此,这很可能是HttpRequestMessage.NET Framework 中实现的错误,该错误未复制到 .NET Core(完全重写)。
我没有时间自己做,但我建议在.NET Framework GitHub 项目中提出一个错误,参考这个堆栈溢出帖子。
您还可以在.NET 开发人员社区上发布您的问题,以获得一些建议和解决方法。
除此之外,我想不出任何解决您问题的方法。
更新1:
就在我要开始做其他事情时,我意识到它System.Uri是在执行ToString().
以下面的代码为例:
Uri uri = new Uri("https://example.com/?var=a%3Ab%3Dc%26d%3Fe");
var original = uri.OriginalString;
var toString = uri.ToString();
Run Code Online (Sandbox Code Playgroud)
如您所见,原始字符串是正确的,但 ToString() 的结果是错误的。
更新 2:
现在发生的事情更明显了,我能够挖掘出这个旧的 stackoverflow 帖子:System.Uri 和编码的冒号 (:)以及这个社交 MSDN 帖子。两者都是很久以前创建的,看起来 .NET 团队从未决定解决这个问题。我无法访问从我所在的位置引发的Microsoft Connect 错误以了解其结果,但 .NET Framework GitHub 项目和 .NET 开发人员社区页面仍然可能是从 .NET 获得响应的最佳位置直接组队。(社交 MSDN 站点主要是非 Microsoft 人员,因此不会有太大帮助)。
| 归档时间: |
|
| 查看次数: |
463 次 |
| 最近记录: |