POST 请求标头中的内容类型缺少 FormData 边界

Posted

技术标签:

【中文标题】POST 请求标头中的内容类型缺少 FormData 边界【英文标题】:FormData boundary missing from content-type in POST request header 【发布时间】:2015-02-28 22:06:45 【问题描述】:

我使用的代码与我在类似项目中成功用于文件上传的代码相同,但由于某种原因,边界从未添加到请求标头中的 content-type 属性中。这导致我的 C# web-api 函数无法检测到图像。

这是我使用 angularjs 的帖子请求:

var formData = new FormData($('#testform')[0]);

$http(
    url: serviceBase + 'api/Client/' + item.practiceID + '/SavePhoto',
    method: "POST",
    data: formData,
    headers:  'Content-Type': false ,       
    transformRequest: function (data)  return data; 
).success(function (response)       
).error(function ()   
);

这是请求的样子:

Request URL:http://localhost:56769/api/Client/178/SavePhoto
Request Headers
Provisional headers are shown
Accept:application/json, text/plain, */*
Authorization:Bearer JfDnrAIkSttZ8GnHa-Wo9wBH-HVWpbiUgGSic11DF_OlTgseuTPgTisxybvEyw2fEyer1FJ7DjKWqK15P-ZdhO_X1aHp7-GiIW2Q4BTF5svTyJKWtM2jk-XEN6qXuEIhAi6-phryd_LlGLOlLMYMKhQZGULxdyk_dUvDGt6bY5Z0L-LbV5uc74q3MyLMMj_vypNgbFCAxGEAGeeeGlP7jwlyyz7EY-eRfRhXxjFqOjI
Content-Type:false
Origin:http://localhost:58431
Referer:http://localhost:58431/index.html
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36
Request Payload
------WebKitFormBoundary6padOMi9aJxqx34h
Content-Disposition: form-data; name="profile-photo"; filename="Jellyfish.jpg"
Content-Type: image/jpeg
------WebKitFormBoundary6padOMi9aJxqx34h--

有谁知道是什么原因导致无法在 content-type 参数中生成边界?

【问题讨论】:

【参考方案1】:

尝试将Content-Type 标头传递为undefined 而不是false

headers:  'Content-Type': undefined 

【讨论】:

非常感谢,过去几个小时我一直在为这个问题摸不着头脑。知道为什么 content-type : false 会突然不起作用吗?我猜它可能与 jquery 或 angularjs 版本相关,但除此之外我不知道。

以上是关于POST 请求标头中的内容类型缺少 FormData 边界的主要内容,如果未能解决你的问题,请参考以下文章

POST请求中缺少授权标头[重复]

Zend_Http_Client - 为啥我的 POST 请求发送错误的内容类型标头?

缺少使用 WebClient 发送 POST 请求的 Content-Length 标头(SpringBoot 2.0.2.RELEASE)

Alamofire POST 请求,正文中有一个简单的字符串作为参数,标头仍然显示缺少的参数值

带有标头和原始 json 正文的 Volley POST 请求

HTTP 请求 - 错误“缺少标头 'UUID'”