Вам не нужно использовать необработанный объект HttpWebRequest для выполнения HTTP-вызова. HttpClient был введен в 2012 году для упрощения асинхронных HTTP-вызовов.
Вы можете сделать что-то простое, как:
var content=new StringContent(postData,Encoding.UTF8, "application/json");
HttpResponseMessage response=await httpClient.PostAsync(url,content);
//Now process the response
if (response.IsSuccessCode)
{
var body=await response.Content.ReadAsStringAsync();
var responseDTO=JsonConvert.DeserializeObject<MyDTO>(body);
}
Вместо того, чтобы создавать строку JSON вручную, вы можете использовать строго типизированный класс или анонимный объект и сериализовать его в JSON с JSON.NET:
var data=new {
action=4,
device_token="3e8ea119a90ee6d2",
key = "9475962085b3a1b8c475d52.95782804",
shop=1,
language=1
};
var postData=JsonConvert.SerializeObject(data);
var content=new StringContent(postData,Encoding.UTF8, "application/json");
var response=await httpClient.PostAsync(url,content);
...
Вы можете прочитать тело ответа за один раз как строку, используя ReadAsStringAsync , или вы можете получить поток ответа с помощью ReadAsStreamAsync . Вы можете скопировать данные ответа непосредственно в другой поток, например, в файл или поток памяти с помощью HttpContent.CopyToAsync
Проверьте Вызовите веб-API из .NET Client для получения дополнительных примеров. Несмотря на заголовок, примеры работают для вызова любого HTTP / REST API.
Пакет Microsoft.AspNet.WebApi.Client
, упомянутый в этой статье, - это еще одна вещь, которая применяется к любому вызову, а не только к вызовам ASP.NET Web API. Например, метод расширения PostAsJsonAsync
объединяет сериализацию и отправку запроса на URL. С его помощью публикация действия DTO может быть сведена к одной строке:
var data=new {
action=4,
device_token="3e8ea119a90ee6d2",
key = "9475962085b3a1b8c475d52.95782804",
shop=1,
language=1
};
var response=await httpClient.PostAsJsonAsync(url,data);