【问题标题】:c# setting uploadFile content-Typec#设置uploadFile内容类型
【发布时间】:2013-04-14 03:48:55
【问题描述】:

我正在尝试创建一个对我的服务器的 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 以及如何防止它这样做?

【问题讨论】:

  • 你遇到了什么异常?
  • 去掉wc.Headers.Add("Content-Type", "text/plain");还能用吗?

标签: c# post file-upload


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2020-05-30
    • 2010-12-27
    • 2012-12-29
    • 2012-10-19
    • 2013-03-15
    • 2016-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多