#c# #postman #httpclient #dotnet-httpclient #restsharp
#c# #почтальон #httpclient #dotnet-httpclient #restsharp
Вопрос:
После того, как я вошел в используемый мной API, я пытаюсь загрузить документ с помощью RestSharp.
Я смог сделать это с помощью Postman. Скриншот приведен ниже:
Генератор кода Postman генерирует этот блок кода для меня:
var client = new RestClient("http://80.211.238.187/AcumaticaERP/entity/Default/17.200.001/StockItem/POSTMAN123/files/sample.pdf");
client.Timeout = -1;
var request = new RestRequest(Method.PUT);
request.AddHeader("Content-Type", "application/pdf");
request.AddParameter("application/pdf", "<file contents here>", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
но я не знаю, как отредактировать часть <содержимое файла здесь> из приведенного выше блока кода.
Я также смог добиться этого, используя HttpClient, предложенный в руководстве по документации соответствующего API:
using (StreamReader sr = new StreamReader(@"C:UsersfcomakDownloadssample.pdf"))
{
_httpClient.PutAsync("http://80.211.238.187/AcumaticaERP/entity/Default/17.200.001/StockItem/POSTMAN123/files/sample.pdf", new StreamContent(sr.BaseStream))
.Result
.EnsureSuccessStatusCode();
}
Но мне нужно преобразовать запрос HttpClient в запрос RestSharp. Я пытался добиться этого с помощью RestSharp, но потерпел неудачу. Даже если бы я мог отправить файл, его содержимое просматривалось некорректно. Вот блок кода, который я пробовал:
using (StreamReader sr = new StreamReader(@"C:UsersfcomakDownloadssample.pdf"))
{
restClient.Execute(new RestRequest("http://80.211.238.187/AcumaticaERP/entity/Default/17.200.001/StockItem/POSTMAN123/files/sample.pdf", Method.PUT)
.AddHeader("Content-Type", "application/pdf")
.AddParameter("application/pdf", new StreamContent(sr.BaseStream), ParameterType.RequestBody));
}
Кстати, я могу отправлять или получать содержимое json, используя этот api с этим RestClient. И, конечно, я уже вошел в систему. Причина моего сбоя связана с моим RestClient.
Я был бы благодарен за любую помощь.
Комментарии:
1. вероятно, речь идет о
new StreamContent(sr.BaseStream)
части.2. И когда я открываю загруженный файл PDF с помощью RestClient с помощью блокнота, он выдает мне этот текст:
System.Net.Http.StreamContent
Ответ №1:
Я только что решил проблему.
using (WebClient wc = new WebClient())
{
byte[] value = wc.DownloadData("http://www.africau.edu/images/default/sample.pdf");
restClient.Execute(new RestRequest("http://80.211.238.187/AcumaticaERP/entity/Default/17.200.001/StockItem/POSTMAN123/files/sample.pdf", Method.PUT)
.AddHeader("Content-Type", "application/pdf")
.AddParameter("application/pdf", value, ParameterType.RequestBody)
);
}
Как вы видите, я использовал WebClient.DownloadData()
вместо StreamReader.BaseStream()
Или вы можете преобразовать локальные данные в массив байтов с помощью File.ReadAllBytes()
string entitySource = @"C:UsersfcomakDownloadssample2.pdf";
byte[] value = File.ReadAllBytes(entitySource);
restClient.Execute(new RestRequest(entityBasePath entityName "/" inventoryID "/files/" fileName, Method.PUT)
.AddHeader("Content-Type", "application/pdf")
.AddParameter("application/pdf", value, ParameterType.RequestBody)
);
К вашему СВЕДЕНИЮ