带有可选上传文件的 HttpClient 发布表单
Posted
技术标签:
【中文标题】带有可选上传文件的 HttpClient 发布表单【英文标题】:HttpClient post form with optional upload files 【发布时间】:2013-08-17 15:14:44 【问题描述】:我有一个网络表单,其中包含多个用于上传照片的选项(最多 10 个)。 ContentType
设置为“multipart/form-data”。我知道如何只上传一个文件,但不知道如何为其他 9 个可选文件创建 HttpContent
?使用适当的 ContentDisposition
标头创建 MultipartContent
没有运气。充其量我得到了:
内容配置:表单数据; name="bla bla bla";
或者,如果我将参数添加到 ContentDisposition
标头:
内容配置:表单数据; name="bla bla bla";文件名;
对于像这样的可选上传文件,我需要发送包含空内容的发布请求:
内容配置:表单数据; name="bla bla bla";文件名=""
任何想法表示赞赏。
【问题讨论】:
使用 Wireshark 或 Fiddler 与浏览器一起查看正确的 HTTP 内容的样子,然后在代码中重现它...... 我知道正确的请求是什么样子的。问题是如何在 ContentDispostion 中添加参数“文件名”。空值或空值抛出异常“无效参数”... 我的意思是参数“文件名”为空值。 我不明白你的意思……抱歉。 只有当我实际添加一些有效负载(如 StreamContent)时,参数“文件名”才会出现在 Content-Disposition 标头中。在这种情况下,我有一个正确的 Content-Disposition 标头。我想知道如何创建一些没有实际有效负载但使用 Content-Disposition 标头的 HttpContent,如下所示:form-data;名称=“内容名称”;文件名="" ? 【参考方案1】:好的,我不知道这是否是我的问题的最佳解决方案,但至少它有效:
1. 为 HttpContent 创建新类(HttpContent
的子类)。
2.初始化Content-Disposition
标头。
3. 重写TryComputeLength
(return false) 和SerializeToStreamAsync
(只是序列化任务的stub) 两个方法。
现在可以将此类添加到MultipartFormDataContent
。
http 请求内容如下:
---------[边界字符串]Content-Disposition: form-data; name="formFieldName"; filename=""----------[边界字符串]
【讨论】:
以上是关于带有可选上传文件的 HttpClient 发布表单的主要内容,如果未能解决你的问题,请参考以下文章