Как мне загрузить документ, преобразовав запрос HttpClient в запрос RestSharp?

#c# #postman #httpclient #dotnet-httpclient #restsharp

#c# #почтальон #httpclient #dotnet-httpclient #restsharp

Вопрос:

После того, как я вошел в используемый мной API, я пытаюсь загрузить документ с помощью RestSharp.

Я смог сделать это с помощью Postman. Скриншот приведен ниже:

Запрос 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)
        );
 

К вашему СВЕДЕНИЮ