尝试将POST示例复制到C#
我尝试使用POST将文件上传到FlashAir卡。有一个JavaScript示例可以在我的机器上使用:尝试将POST示例复制到C#,c#,http,C#,Http,我尝试使用POST将文件上传到FlashAir卡。有一个JavaScript示例可以在我的机器上使用: cgi="http://flashair/upload.cgi"; $.ajax({ url: cgi, type: "POST", data: fd, processData: false, contentType: false, success: function(h
cgi="http://flashair/upload.cgi";
$.ajax({ url: cgi,
type: "POST",
data: fd,
processData: false,
contentType: false,
success: function(html){
if ( html.indexOf("SUCCESS") ) {
alert("success");
getFileList(".");
}else{
alert("error");
}
}
});
我试图用.NET实现同样的目标。这就是我所做的:
var cgi="http://flashair/upload.cgi";
byte[] bytes = File.ReadAllBytes(filename);
HttpContent bytesContent = new ByteArrayContent(fileData);
using (var client = new HttpClient())
{
using (var formData = new MultipartFormDataContent())
{
formData.Add(bytesContent, "file");
var response = client.PostAsync(command, formData).Result;
if (!response.IsSuccessStatusCode)
{
return false;
}
return true;
}
}
虽然第一个示例有效,但我的C#变量也返回200代码(这需要一段时间,让我觉得文件正在上载),但文件没有保存
你知道这两个例子的区别在哪里吗?这两个例子可能会导致这个问题。菲德勒给了我正确的方向。JS和C#变体之间的一个区别是标题
Expect: 100-continue
它只出现在.NET变体上。这不容易移除。事实上,其他答案的提示在这里使用
System.Net.ServicePointManager.Expect100Continue = false;
使用HttpClient时似乎没有任何效果。因此,我决定使用此代码的修改版本:
只需添加以下行:
HttpWebRequest wr = (HttpWebRequest)WebRequest.Create(url);
wr.ServicePoint.Expect100Continue = false;
这导致Expect-100头被删除,文件上载成功。您可以使用Fiddler检查两个POST请求,并查看它们之间的差异