2016-08-18 4 views
2

Могу ли я отправить данные в URI и загрузить файл в одном запросе WebClient?Использование WebClient для запроса POST и загрузки файла

TL;DR

Я использую класс, расширяющий WebClient связаться с нашей PHP API и скачать файл. Класс добавляет CookieContainer к WebClient, чтобы включить сеанс PHP.

  1. WebClient.UploadValues() публикует запрос NameValueCollection на сервер для аутентификации следующего запроса.
  2. WebClient.DownloadFile() загружает файл.

Это единственная часть API, которая не очень RESTful, и я бы предпочел переместить ее в один запрос без учета состояния.

Я могу использовать WebClient.QueryString для ручной установки строки запроса NameValueCollection перед вызовом DownloadFile(), но этот метод использует метод GET, и API ожидает данные POST.

Можно ли установить метод POST перед вызовом DownloadFile()? Есть ли другой способ?

ответ

2

Ответ был проще, чем я понял (doh).

using (WebClient client = new WebClient()) 
{ 
    byte[] result = client.UploadValues(url, data); 
    File.WriteAllBytes(path, result); 
} 

UploadValues() отправляет данные POST. Возвращенным массивом byte [] будет файл.

Смежные вопросы