FormUrlEncodedContent的长度限制,MS的人为决定或HTTP规范?

时间:2019-11-16 15:48:18

标签: .net http dotnet-httpclient

我收到“无效的URI:Uri字符串太长。”在new FormUrlEncodedContent(pair);。经过一些网页搜索后,我发现大约有2000个长度限制。用户提到URL有大小限制,我认为URL的长度不应超过2000个字符,这是有道理的。但是,就我而言,我并没有尝试将其用作GET请求的URL。我正在尝试将表单数据编码到POST请求的主体中。因此,2000年的限制似乎太短了。

我在网上搜索了“ x-www-form-urlencoded最大长度”,但找不到答案。 the documentation pagethe source code也没有提及长度限制。

由于我正在调用REST API,因此无法更改服务器。因此,问题是,随着Microsoft实施,“ x-www-form-urlencoded” POST请求的正文长度是否应限制在2000左右?还是可以忽略它并放置更长的数据?如果是前者,则可以将请求分解为多个请求,但是如果是后者,我是否必须按照现有答案显示的方式对字符串进行手动编码,或者是否存在用于此类任务的现有官方课程? / p>

1 个答案:

答案 0 :(得分:0)

实际限制是65520个字符。 here有一些历史。有趣的是,这个限制似乎刚在最近(10/10/2019)的{.3}}中出现。

在撰写本文时,我不确定该更改是否在最新的.NET Core稳定版本中仍然可用,但足以说一开始限制的原因是非常“传统”的(不是基于在任何当前规范上),都永远不会在.NET Framework中将其删除,而在.NET Core中将其删除。

如果您需要定位其他/较旧的平台,则一种替代方法是使用removed(免责声明:我是作者)。其PostUrlEncodedAsync方法提供了更简洁的语法,并使用了Flurl

await "http://example.com".PostUrlEncodedAsync(new { 
    data1 = "value1", 
    data2 = "value2"
});