#c# #asp.net #.net #curl #httpclient
#c# #asp.net #.net #curl #httpclient
Вопрос:
Я пытаюсь преобразовать запрос post, представленный через cURL, в c # HttpClient с использованием старого приложения.NETFramework4
Нотация cURL запроса из документов API:
curl -X POST -H 'Authorization: Token token=sfg999666t673t7t82' -H 'Content-Type: multipart/form-data' -H 'content-type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW' -F file=@/Users/user1/Downloads/download.jpeg -F file_name=nameForFile -F is_shared=true -F targetable_id=1 -F targetable_type=Lead -X POST "https://domain.freshsales.io/api/documents"
Мой код на C # в настоящее время принимает файл, загруженный пользователем через форму ввода, и пытается загрузить:
var filename = String.Format("status_{0}", DateTime.Now.ToString("dd/MM"));
using (var content = new MultipartFormDataContent())
{
content.Add(new ByteArrayContent(file), "file", filename);
content.Add(new StringContent(filename), "file_name");
content.Add(new StringContent("true"), "is_shared");
content.Add(new StringContent(uID), "targetable_id");
content.Add(new StringContent("Contact"), "targetable_type");
HttpRequestMessage req = new HttpRequestMessage(HttpMethod.Post, $"documents") { Content = content };
return client.SendAsync(req).Resu<
}
На данный момент я всегда получаю BadRequest (400)
В PostMan я могу получить OK (201)..
Для получения дополнительной информации это код, который PostMan представляет для C # RestSharp (не уверен, как полностью перевести if в HttpClient byteArrayContent..
var client = new RestClient("mydomain.io/api/documents");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Token token=xxx");
request.AddFile("file", "/Users/user1/Desktop/sc.png");
request.AddParameter("targetable_id", "134");
request.AddParameter("targetable_type", "Contact");
request.AddParameter("name", "a.jpg");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
Комментарии:
1. Вы сравнивали HTTP-запросы, используя такие инструменты, как Fiddler или Wireshark? Видите в них что-нибудь другое? Рассматривали ли вы возможность использования RestSharp вместо HttpClient?
2. @mason Я не думаю, что смогу использовать RestSharp, поскольку это старый .netFramework4.0
3. Почему вы используете неподдерживаемую версию .NET? Вы должны обновиться до последней версии 4.X. И вы можете использовать RestSharp 105.2.3 , который поддерживает .NET Framework 4.0.
4. @mason дело в том, что, как вы можете видеть даже в примере RestSharp, который я опубликовал, метод .addFile требует путь к локальному файлу, тогда как в моем приложении файл поступает как поток / байтовый массив из формы ввода… Так что я действительно не уверен, как мне это перевести..
5. Предположительно, существует перегрузка этого метода или другого метода с аналогичным именем, который будет принимать массив байтов. Если вы просто попробуете это , тогда Intellisense (вы используете Visual Studio, верно?) должно помочь вам найти подходящий метод …….. Вы все еще не ответили на мой вопрос относительно Fiddler или Wireshark.