C#设置上传文件的Content-Type。

3

我正在尝试创建一个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文档后,我发现当Content-type header以multipart开头时,会抛出WebException异常。
我的问题是为什么contentType会被设置为multipart,如何防止它这样做?

你遇到了什么异常? - Martin Prikryl
如果删除 wc.Headers.Add("Content-Type", "text/plain");,它还能正常工作吗? - Lee Gunn
1个回答

4

您的客户端代码看起来没问题。异常可能来自服务器端。但由于您没有分享异常信息,很难判断。请分享异常信息,这样您将得到更好的答案。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接