gpt4 book ai didi

.net-core - 如何阻止 HttpRequestMessage 将请求 URI 中的 %3A 取消编码为冒号 (asp.net core)

转载 作者:行者123 更新时间:2023-12-02 03:30:03 25 4
gpt4 key购买 nike

使用此代码...

using (HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, 
"https://example.com/?var=a%3Ab%3Dc%26d%3Fe")
{
// Do stuff
}

...request.RequestUri 现在的值为“https://example.com/?var=a:b%3Dc%26d%3Fe

请注意,%3A 未编码为冒号字符,但所有其他编码字符仍保持编码状态。

如何防止 %3A 像所有其他编码字符一样未编码?

对于上下文,我正在调用外部 API。冒号会引发错误。我无法控制外部 API,因此需要找到一种符合 API 编码期望的方法。

最佳答案

我认为这个行为描述有点奇怪,所以我决定自己测试一下,实际上在 .NET Framework 4.5.1 和 4.7.1 中,%3A 被解码为a :HttpRequestMessage 类实现。

.NET 4.5.1: dotnet 451 example

.NET 4.7.1: dotnet 471 example

但是在 .NET Core 2.1.401 中,如果原始字符串保持不变,则不会发生相同的行为。

.NET Core 2.1.401: dotnet core example

因此,这很可能是 .NET Framework 中的 HttpRequestMessage 实现的错误,该错误未复制到 .NET Core(完全重写)。

我没有时间自己做,但我建议在 .NET Framework GitHub project 中提出错误。 ,引用此堆栈溢出帖子。

您还可以在 .NET Developer Community 上发布您的问题还可以获得一些建议和解决方法。

除此之外,我想不出任何解决方法来解决您的问题。

更新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();

在 .NET Framework 中执行时: uri.ToString()

可以看到,原始字符串是正确的,但是ToString()的结果是错误的。

更新2:

现在发生的事情已经更加明显了,我能够挖掘出这个旧的 stackoverflow 帖子:System.Uri and encoded colon (:)还有这个social MSDN post 。两者都是很久以前创建的,看起来 .NET 团队从未决定解决这个问题。我无法访问 Microsoft Connect bug raised我想知道它的结果,但 .NET Framework GitHub 项目和 .NET 开发人员社区页面仍然可能是直接从 .NET 团队获得响应的最佳位置。 (社交 MSDN 站点主要是非 Microsoft 人员,因此不会那么有帮助)。

关于.net-core - 如何阻止 HttpRequestMessage 将请求 URI 中的 %3A 取消编码为冒号 (asp.net core),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52106567/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com