Существует несколько способов выполнить запросы HTTP GET
и POST
:
Метод A: HttpClient
Доступно в .NET Framework 4.5+, .NET Standard 1.1+, .NET Core 1.0 +
В настоящее время предпочтительный подход. Асинхронный. Портативная версия для других платформ доступна через NuGet .
using System.Net.Http;
Настройка
рекомендуется для создания экземпляра одного HttpClient
за время жизни вашего приложения и предоставления к нему доступа.
private static readonly HttpClient client = new HttpClient();
POST
var values = new Dictionary<string, string>
{
{ "thing1", "hello" },
{ "thing2", "world" }
};
var content = new FormUrlEncodedContent(values);
var response = await client.PostAsync("http://www.example.com/recepticle.aspx", content);
var responseString = await response.Content.ReadAsStringAsync();
GET
var responseString = await client.GetStringAsync("http://www.example.com/recepticle.aspx");
Метод B: сторонние библиотеки
RestSharp
Испытанная и протестированная библиотека для взаимодействия с REST API. Портативный. Доступно через NuGet .
Flurl.Http
Более новая библиотека со свободным API и помощниками по тестированию. HttpClient под капотом. Портативный. Доступно через NuGet .
using Flurl.Http;
POST
var responseString = await "http://www.example.com/recepticle.aspx"
.PostUrlEncodedAsync(new { thing1 = "hello", thing2 = "world" })
.ReceiveString();
GET
var responseString = await "http://www.example.com/recepticle.aspx"
.GetStringAsync();
Метод C: Наследие
Доступно в .NET Framework 1.1+, .NET Standard 2.0+, .NET Core 1.0 +
using System.Net;
using System.Text; // for class Encoding
using System.IO; // for StreamReader
POST
var request = (HttpWebRequest)WebRequest.Create("http://www.example.com/recepticle.aspx");
var postData = "thing1=hello";
postData += "&thing2=world";
var data = Encoding.ASCII.GetBytes(postData);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = data.Length;
using (var stream = request.GetRequestStream())
{
stream.Write(data, 0, data.Length);
}
var response = (HttpWebResponse)request.GetResponse();
var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
GET
var request = (HttpWebRequest)WebRequest.Create("http://www.example.com/recepticle.aspx");
var response = (HttpWebResponse)request.GetResponse();
var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
Метод D: WebClient (также теперь устаревший)
Доступно в .NET Framework 1.1+, .NET Standard 2.0+, .NET Core 2.0 +
using System.Net;
using System.Collections.Specialized;
POST
using (var client = new WebClient())
{
var values = new NameValueCollection();
values["thing1"] = "hello";
values["thing2"] = "world";
var response = client.UploadValues("http://www.example.com/recepticle.aspx", values);
var responseString = Encoding.Default.GetString(response);
}
GET
using (var client = new WebClient())
{
var responseString = client.DownloadString("http://www.example.com/recepticle.aspx");
}