【问题标题】:Upload raw byte data with dotnet core HttpClient使用 dotnet core HttpClient 上传原始字节数据
【发布时间】:2021-11-11 18:01:35
【问题描述】:

我正在更新一些旧的 C# 代码以使用 HttpClient 而不是 WebClient。作为其中的一部分,我需要将文件的字节数组上传到 api。

使用 WebClient,一切正常

byte[] data = GetMyData();
using (var client = new WebClient())
{
    //set url, headers etc
    var r = client.UploadData(url, "PUT", data);
}

使用HttpClient,我尝试了各种方法,例如

byte[] data = GetMyData();
using (var client = new HttpClient())
{
    //set url, headers etc
    var r = await client.PutAsync(url, new ByteArrayContent(data));
}

我还尝试了使用 Google 搜索发现的多部分数据的不同方法,但服务器不接受我尝试过的任何内容。我没有很多关于服务器API的文档,我只知道WebClient方式已经运行了很多年。有没有办法用 HttpClient 重新创建 WebClient.UploadData 行为?

【问题讨论】:

  • 代码乍一看还不错。您能否将成功和不成功的请求与 Fiddler 或其他嗅探器进行比较?有什么区别?
  • 您确定正确设置了标题吗?您在此处显示的代码看起来完全相同。

标签: c# .net-core dotnet-httpclient


【解决方案1】:

感谢评论者让我走上正轨。通过将其放在实际内容上,未为 HttpClient 方式正确设置 Content-Type 标头。代码如下。

byte[] data = GetMyData();
using (var client = new HttpClient())
{
    //set url, headers etc
    var content = new ByteArrayContent(data);
    content.Headers.ContentType = new MediaTypeWithQualityHeaderValue(contentType);
    var r = await client.PutAsync(url, content);
}

【讨论】:

    猜你喜欢
    • 2020-03-22
    • 2017-09-02
    • 2011-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多