7 Ağustos 2020 Cuma

HttpClient Sınıfı

Giriş
Şu satırları dahil ederiz.
using System.Net.Http;
using System.Net.Http.Headers;
HttpClient sınıfı WebClient sınıfı ile aynı kolaylıkta. Ancak await metodları ile daha rahat kullanılabildiği için tercih ediliyor. Bu sınıf .Net 4.5 ile geliyor.  Açıklaması şöyle
HttpClient is now the preferred way in .NET Core 3.1.
Kullanım
Kısaca şöyle yapıyoruz.
private async void MyMethod(...)
{
    var uri = new Uri (...);
    var http = new HttpClient();
    var response = await http.GetStringAsync(uri);
    ...
}
Constructor
Şöyle yaparız.
using (HttpClient httpClient = new HttpClient()){
  ...
}
Constructor - HttpClientHandler
Örnek
Şöyle yaparız
using var httpClient = new HttpClient(new HttpClientHandler())
{
  BaseAddress = new Uri(_baseUrl)
};

httpClient.DefaultRequestHeaders.Authorization = 
  new AuthenticationHeaderValue("Bearer", accessToken);

var response = await httpClient.GetAsync("/path", cancellationToken);
Constructor - HttpClientHandler + WebProxy
Örnek
Şöyle yaparız
var handler = new HttpClientHandler();
handler.Proxy = new WebProxy(proxy, true);
if (handler.SupportsAutomaticDecompression)
{
  handler.AutomaticDecompression=DecompressionMethods.GZip|DecompressionMethods.Deflate;
}

var client = new HttpClient(handler)
{
  Timeout = TimeSpan.FromSeconds(10)
};
Örnek - HttpClientHandler + Credentials
Şöyle yaparız.
var uri = new Uri("http://localhost:15001");
var credentialsCache = new CredentialCache {
  { uri, "NTLM", CredentialCache.DefaultNetworkCredentials } };
var handler = new HttpClientHandler { Credentials = credentialsCache };
var httpClient = new HttpClient(handler) { BaseAddress = uri,
  Timeout = new TimeSpan(0, 0, 10) };
httpClient.DefaultRequestHeaders.Accept.Add(
  new MediaTypeWithQualityHeaderValue("application/json"));
var response = httpClient.GetAsync("api/MyMethod").Result;
BaseAddress alanı
Default kurulan nesneye bağlanacağı adresi atamak için kullanılır.
Örnek
Şöyle yaparız.
httpClient.BaseAddress = new Uri(...);
Örnek
Şöyle yaparız.
client.BaseAddress = new Uri("http://localhost:8080");
HttpResponseMessage resp = client.GetAsync("api/foreman?test1=1&test2=2").Result;
Örnek
Şöyle yaparız.
string baseAddress = ...;
var httpClient = new HttpClient {
  BaseAddress = new Uri(baseAddress)
};
DefaultRequestHeaders Alanı
HttpRequestHeaders tipindendir.

GetAsync metodu
Şöyle yaparız.
HttpResponseMessage httpResponse = await httpClient.GetAsync("...");
Sonucun başarılı olduğunu şöyle kontrol ederiz.
httpResponse.EnsureSuccessStatusCode();
Eğer bu işlemden sonra veriyi string olarak almak istersek şöyle yaparız ancak bunun yerine direkt GetStringAsync metodunu kullanmak daha iyi.
var content = await httpResponse.Content.ReadAsStringAsync();
Eğer bu işlemden sonra veriyi binary stream olarak almak istersek şöyle yaparız ancak bunun yerine direkt GetStreamAsync metodunu kullanmak daha iyi.
var responseStream = await httpResponse.Content.ReadAsStreamAsync();
GetStreamAsync metodu
Bir Task nesnesi döner. Veriyi binary stream olarak almak için şöyle yaparız.
Stream str = httpClient.GetStreamAsync(uri).Result;
GetStringAsync metodu
Bir Task nesnesi döner. Şöyle yaparız.
HttpClient httpClient = new HttpClient();
var content = await httpClient.GetStringAsync(new Uri(baseAddress));
MaxResponseContentBufferSize alanı
Eğer istersek bellek alanının büyüklüğünü kontol edebiliriz.
httpClient.MaxResponseContentBufferSize = Int32.MaxValue;
PostAsync metodu
HttpStringContent göndermek için kullanılır. Şöyle yaparız.
using (var client = new HttpClient())
{
  client.BaseAddress = new Uri("https://testurl/");
  var content = new FormUrlEncodedContent(new[]
  {
    new KeyValuePair<string, string>("Identification[api_key]", "somekey"),
    ...
  });
  var result = client.PostAsync("", content).Result;
  string resultContent = result.Content.ReadAsStringAsync().Result;
}
Timeout Alanı
Şöyle yaparız.
httpClient.Timeout = new TimeSpan(0, 0, 5);



Hiç yorum yok:

Yorum Gönder