【问题标题】:HttpClient post form with optional upload files带有可选上传文件的 HttpClient 发布表单
【发布时间】: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;名称=“内容名称”;文件名="" ?

标签: c# asp.net .net httpclient dotnet-httpclient


【解决方案1】:

好的,我不知道这是否是我的问题的最佳解决方案,但至少它有效:
1. 为 HttpContent 创建新类(HttpContent 的子类)。
2.初始化Content-Disposition标头。
3. 重写TryComputeLength(return false) 和SerializeToStreamAsync(只是序列化任务的stub) 两个方法。

现在可以将此类添加到MultipartFormDataContent
http 请求内容如下:

---------[边界字符串]
Content-Disposition: form-data; name="formFieldName"; filename=""

----------[边界字符串]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-12
    • 2011-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-11
    • 1970-01-01
    相关资源
    最近更新 更多