是否可以增加 HttpClient 中的最大 URL 长度? (无效的 URI:uri 字符串太长)

Posted

技术标签:

【中文标题】是否可以增加 HttpClient 中的最大 URL 长度? (无效的 URI:uri 字符串太长)【英文标题】:Is it possible to increase the max URI lenght in HttpClient? (Invalid URI: The uri string is too long) 【发布时间】:2021-01-18 16:36:47 【问题描述】:

我在Dotnet 5 中使用HttpClient 并尝试创建一个带有很长URI 的查询。我得到了这个例外

Invalid URI: The uri string is too long

我试图弄清楚它的来源,它似乎可以归结为 this line 并带有一个常量:

internal const int c_MaxUriBufferSize = 0xFFF0;

似乎URL长度超过64K实际上是不可能的,但可能有一些我没有弄清楚?

【问题讨论】:

为什么需要这么长的uri? 这能回答你的问题吗? HttpClient: The uri string is too long @PeterCsala 嗨,不,讽刺地回答了一个完全不同的问题 【参考方案1】:

简而言之:你不能。

如果您查看Uri 的来源,那么原因就很清楚了。

对于 .NET Core,Uri 的源代码位于 this file。

在其 GetException method 内部,它转换为 ParsingError.SizeLimit into 和 UriFormatException

相关资源入口可以在here找到。

所以,如果我们查看Uri 的代码,看看它何时以ParsingError.SizeLimit 失败,那么我们会发现这些:

ParseScheme GetHostViaCustomSyntax ParseRemaining ParseRemaining ParseRemaining CheckAuthorityHelper

在前两种情况下,根据c_MaxUriBufferSize (1) 检查限制,其定义如下:

internal const int c_MaxUriBufferSize = 0xFFF0;

在以后的情况下,将根据 ushort.MaxValue 检查限制。

不幸的是,它们都无法改变。

【讨论】:

谢谢你的回答,我想的也是这样……

以上是关于是否可以增加 HttpClient 中的最大 URL 长度? (无效的 URI:uri 字符串太长)的主要内容,如果未能解决你的问题,请参考以下文章

[UOJ #48]UR #3核聚变反应强度

单例 httpClient 到 AppService 的单个实例

如何增加 Python 中的最大递归深度? [复制]

是否可以从 HttpClient-5.x 中止 HttpAsynClient 中的 http 请求 [GET、POST 等]?

[UR #19]通用测评号

UOJ#75. UR #6智商锁 随机化算法 矩阵树定理