webclient标头中有两个“Content-Type”

时间:2012-07-03 19:12:50

标签: c# header webclient content-type

               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);

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

2 个答案:

答案 0 :(得分:0)

当二进制数据发布到服务器以及其他值时,会添加“boundary”参数。这是为了允许服务器识别数据的边界 - 边界参数的值是随机的并且被选中,以便字符串永远不会出现在发布的数据中(因此服务器可以作为边界)。

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

答案 1 :(得分:0)

使用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