httpclient - 如何将 Content-Disposition 设置为“application/json;”在多部分

Posted

技术标签:

【中文标题】httpclient - 如何将 Content-Disposition 设置为“application/json;”在多部分【英文标题】:httpclient - how to set Content-Disposition to "application/json;" in a multipart 【发布时间】:2015-03-19 15:12:00 【问题描述】:

使用 System.Net.Http.Httpclient,我正在尝试用 C# 和 wp8 做一个多部分的帖子。

这是我的代码的 sn-p:

varclient = new HttpClient();

client.DefaultRequestHeaders.TryAddWithoutValidation(    
"Content-Type", "application/json");

content = new MultipartFormDataContent();
content.Add(new StringContent(requestObj, Encoding.UTF8, "application/json"), "request");

但是使用 Fiddler,我注意到我正在发送这个:

内容配置:表单数据;名称=请求

内容类型:文本/纯文本; charset=utf-8

虽然我需要发送这个(取自正在通话的安卓设备):

内容处置:应用程序/json; name="请求"

内容类型:文本/纯文本; charset=UTF-8

如何达到预期效果?

【问题讨论】:

我知道这是一个老问题,但您似乎应该想将Content-Type 设置为application/json 而不是Content-Disposition 【参考方案1】:

怎么样:

使用 TryAddWithoutValidationHttpContent 上设置标头

并将 MultipartFormDataContent 更改为 MultipartContent 对象:

var content = new MultipartContent();

var contentData = new StringContent(requestObj, Encoding.UTF8, "application/json");
contentData.Headers.TryAddWithoutValidation("Content-Disposition", "application/json name=request");
content.Add(contentData);

这会产生这些标题

POST http://www.directupload.net/index.php?mode=upload HTTP/1.1
Content-Type: multipart/mixed; boundary="6905763f-e85a-44f9-b7f4-8967b357addf"
Host: www.directupload.net
Content-Length: 274
Expect: 100-continue
Connection: Keep-Alive

--6905763f-e85a-44f9-b7f4-8967b357addf
Content-Type: application/json; charset=utf-8
Content-Disposition: application/json name=request

    "id": 1,    "name": "A green door",    "price": 12.50,    "tags": ["home", "green"]
--6905763f-e85a-44f9-b7f4-8967b357addf--

【讨论】:

谢谢,但还是一样;内容类型:应用程序/json; charset=utf-8 内容配置:表单数据 您将 MultipartFormDataContent 更改为 MultipartContent()? 请求的内容处置标头是否已更改,但服务器现在返回 http 415 不受支持的媒体类型? 是的,我有 415,正在做这个 content.Headers.TryAddWithoutValidation("Content-Disposition", "application/json name=request");

以上是关于httpclient - 如何将 Content-Disposition 设置为“application/json;”在多部分的主要内容,如果未能解决你的问题,请参考以下文章

如何使 HttpClient 忽略 Content-Length 标头

使用 HttpClient 将 Content-Type 设置为“application/json”并将对象添加到正文

如何从 HttpClient.PostAsJsonAsync() 生成的 Content-Type 标头中删除 charset=utf8?

HttpClient的Content-Type设置

如何使用 System.Net.Http.HttpClient 为 Azure 表存储正确设置 content.Headers.ContentMD5 属性

如何为 HttpClient 请求设置 Content-Type 标头?