HttpClient
我用库创建了 C# 客户端。
我使用 BASE64 编码数据来上传文件(通过 POST)。有时,即使数据不是太大(大约 500kB),我也会遇到错误(可能是因为内容长度限制)。
我将其更改为MultipartFormData
POST,正如我们所料,它运行良好,超过 1MB。
Web 服务器在简单的 Form POST 和 Multipart POST 之间是否以不同的方式处理会话?
请注意,我使用的 Web 服务是 Azure 网站。
HttpClient
我用库创建了 C# 客户端。
我使用 BASE64 编码数据来上传文件(通过 POST)。有时,即使数据不是太大(大约 500kB),我也会遇到错误(可能是因为内容长度限制)。
我将其更改为MultipartFormData
POST,正如我们所料,它运行良好,超过 1MB。
Web 服务器在简单的 Form POST 和 Multipart POST 之间是否以不同的方式处理会话?
请注意,我使用的 Web 服务是 Azure 网站。
这在 Azure 或 IIS 中没有任何限制。这就是 HTTP 协议的设计方式!在此处阅读有关Form
元素的不同类型内容类型的更多信息。
从规范:
应用程序/x-www-form-urlencoded
这是默认的内容类型。使用此内容类型提交的表单必须编码如下:
控件名称和值被转义。空格字符替换为
+', and then reserved characters are escaped as described in [RFC1738], section 2.2: Non-alphanumeric characters are replaced by
%HH'、一个百分号和两个表示字符 ASCII 代码的十六进制数字。换行符表示为“CR LF”对(即,`%0D%0A')....
现在对于多部分:
多部分/表单数据
内容类型“application/x-www-form-urlencoded”对于发送大量二进制数据或包含非 ASCII 字符的文本效率低下。内容类型“multipart/form-data”应用于提交包含文件、非 ASCII 数据和二进制数据的表单。
内容“multipart/form-data”遵循 [RFC2045] 中概述的所有多部分 MIME 数据流的规则。“multipart/form-data”的定义可在 [IANA] 注册表中找到。
因此,要上传文件,您应该始终使用multipart/form-data
. 不仅适用于 Azure,也适用于 IIS,适用于任何托管服务提供商和任何实现 HTTP 协议标准的 Web 服务器。