简体   繁体   中英

Upload raw byte data with dotnet core HttpClient

I am updating some old C# code to use HttpClient instead of WebClient. As part of this, I need to upload a byte array of a file to an api.

With WebClient, this worked perfectly fine

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

With HttpClient, I've tried various methods, such as

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

I've also tried different ways of using Multipart data that I found Googling around, but the server does not accept anything I've tried. I don't have a lot of documentation on the server API, I only know that the WebClient way has worked well for many years. Is there a way to recreate the WebClient.UploadData behavior with HttpClient?

Thanks to the commenters for putting me on the right track. The Content-Type headers were not being set correctly for the HttpClient way, by putting it on the actual content. code below.

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);
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM