c#设置uploadFile内容类型

时间:2013-04-14 03:48:56

标签: c# post file-upload

我正在尝试创建一个api调用我的服务器,这将允许我上传.csv文件。

客户端代码

string url = "http://testserver/testapi";
string filePath = @"C:\test.csv";
using (WebClient wc = new WebClient())
{
    wc.Headers.Add("Content-Type", "text/plain");
    byte[] responseArray = wc.UploadFile(url, filePath);
}

服务器端代码

string savePath = testSavePath;
foreach (string f in Request.Files.AllKeys)
{
    HttpPostedFileBase file = Request.Files[f];
    file.SaveAs(savePath);
}

我在此行byte[] responseArray = wc.UploadFile(url, filePath);

上收到例外

奇怪的是,当我看到Request时,我看到了

ContentType="multipart/form-data; boundary=---------------------8d006b7c2a5452c"

查看UploadFile的文档,我发现The Content-type header begins with multipart.

时会抛出WebException

我的问题是为什么contentType被设置为multipart,我该如何阻止它?

1 个答案:

答案 0 :(得分:4)

您的客户端代码似乎没问题。例外可能来自服务器端。但是你很难判断,因为你没有分享这个例外。请你做,你会得到更好的答案。

对于多部分内容类型:WebClient.UploadFile使用Content-Type标头的值作为文件的内容类型(如果未设置则默认为application/octet-stream),而不是整个HTTP请求。实际的HTTP请求总是(如您所见)multipart/form-data(根据HTTP规范上传文件),您不能(也不应该)更改它。文档中的注释是指实际文件的内容类型。这意味着你不能要求WebClient自己上传多部分文件(包含在另一个多部分HTTP信封中)。