Добро пожаловать в переполнение стека!
Из предоставленного примера кода довольно сложно понять, что идет не так, поскольку он не работает в изоляции.
Тем не менее, сначала я проверю, чтоизображение, которое вы потребляете по URL, существует в ожидаемом вами формате. Если вы скачали .jpeg
с URL, можете ли вы открыть его на своем компьютере? Предполагая, что он хорошо структурирован, я бы затем попытался разобраться, является ли неправильно сформированный HttpClient или если что-то не так со значениями, которые вы предоставляете для API Facebook.
Вы можете сделать это, создав простоеC # Web API проект, который прослушивает многоэлементную загрузку по определенному маршруту. См. этот ответ для примера кода о том, как это сделать.
Предполагая, что вы можете отправить .jpeg
в вопросе между локальным клиентом и локальной конечной точкой, принимающей multipart/form-data
, тогда проблема должна заключаться в том, как вы используете сам API Facebook.
В вашем примере я не вижу, чтобы вы где-либо использовали значение переменной content
. Является ли это намеренным?
Если эта отсутствующая переменная - красная сельдь, тогда вы можете попробовать выполнить что-то вроде (убедившись, что вы должны поменять значения так, как это необходимо для тех, с которыми у вас проблемы):
using (var httpClient = new HttpClient())
using (var formDataContent = new MultipartFormDataContent())
{
// Read the file in from a local path first to verify that the image
// exists in the format you're expecting.
var fileStream = File.OpenRead("/some/path/image.jpeg");
using (var streamContent = new StreamContent(fileStream))
{
// Don't actually call `.Result` you should await this, but for ease of
// demonstration.
var imageContent = new ByteArrayContent(streamContent.ReadAsByteArrayAsync().Result);
imageContent.Headers.ContentType = MediaTypeHeaderValue.Parse("multipart/form-data");
formDataContent.Add(imageContent, "image", "your-file-name-here");
formDataContent.Add(new StringContent ($"{{\"id\":\"{long.Parse("your-recipient-here")}\"}}"), "recipient");
formDataContent.Add(new StringContent($"{{\"attachment\":{{\"type\":\"{"image"}\", \"payload\":{{\"is_reusable\"=true}}}}"), "message");
// Again don't call `.Result` - await it.
var response = httpClient.PostAsync("https://some-url-here.com", formDataContent).Result;
}
}
Если вы выполнили вышеуказанное, вы все еще получаете сообщение об ошибке пустого тела сообщения?