【问题标题】:two "Content-Type" in webclient headerwebclient 标头中的两个“Content-Type”
【发布时间】:2012-07-04 06:42:27
【问题描述】:
               var uri = URL_BASE + myuri
                          string.Format("providers/{0}/items?feed={1}&id={2}&type=cf", provider, feed, zipFileNoPath);
                var webClient = new WebClient();
                webClient.Credentials = new NetworkCredential(email, password);
                webClient.Headers.Add("Accept", "*/*");
                webClient.Headers.Add("Content-Type", "application/octet-stream");
                webClient.UploadFileAsync(new Uri(uri), "POST", zipFile);

对于上面的代码,当我从提琴手观看时,我在标题中看到了两个“Content-Type” 一种是Content-Type:multipart/form-data;边界=---------------------8cf27396e080e0a, 另一种是Content-Type:application/octet-stream 为什么会这样?那谁生效呢,谢谢

【问题讨论】:

    标签: c# header webclient content-type


    【解决方案1】:

    当二进制数据与其他值一起发布到服务器时,会添加“边界”参数。这是为了让服务器识别数据的边界——边界参数的值是随机的并且被挑选出来,这样字符串就不会出现在发布的数据中(因此可以服务器作为边界)。

    我猜webclient 会自动添加这个,如果是这样,你可以评论我们自己添加这个标题的行。不幸的是,我不知道 HTTP 规范来判断重复标头是否有效。

    【讨论】:

    • 我把Headers.add部分注释掉了,还是不正确,我的zip文件是514字节,服务器收到后变成740字节,说无效
    • 我认为您应该扩展问题以包括基础架构的服务器部分。
    【解决方案2】:

    使用 UploadData 而不是 UploadFile

                var webClient = new WebClient();
                webClient.Credentials = new NetworkCredential(email, password);                                     
                webClient.UploadDataCompleted += webClient_UploadDataCompleted;
                byte[] fileBytes = File.ReadAllBytes(zipFile);
                webClient.UploadDataAsync(new Uri(uri), "POST", fileBytes);
    

    那我只会看到一个 Content-Type

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-22
      • 2021-05-20
      • 1970-01-01
      • 2021-11-08
      • 1970-01-01
      • 2019-04-15
      • 2017-10-08
      相关资源
      最近更新 更多