SQL LIFE

Asp.net C# HttpClient post ve HttpClient get işlemi

asp.net c# httpclient işlemleri, asp.net c# httpclient kullanımı, asp.net c# httpclient post get 

 

Merhaba, bu yazımda C# .Net framework ortamında rest servisleri kullanırken http client post ve get işlemlerinden bahsedeceğim. GET ve POST Sunucu ve istemci arasında request-response işlemini yapan http(The Hypertext Transfer Protocol) protokolünün en çok kullanılan metotlarıdır. Get işlemi genelde  veri listesi alırken(retrieve), parametre haricinde bir değer göndermediğimiz, kontrol gibi işlemlerde kullanılır bu yüzden Post işlemine göre daha hızlıdır. Post ise daha güvenlidir gönderilen, veriyi hedefe body kısmında taşır.
İlk olarak, Get işlemi yapalım, bir Duyuru sınıfı tanımlayalım.

public class Duyuru
    {
        public int id { get; set; }
        public string kayittarih { get; set; }
        public string duyurubaslik { get; set; }
        public string duyuruicerik { get; set; }
    }
 

Duyuru sınıfı alacağımız verinin modelidir. Servis bize bu alanlara sahip bir veri seti dönecek. Bir sonraki işlemde ise EventService sınıfımızı yaratıyoruz. Servis birden Fazla Event nesnesi dönecek bu yüzden GetAllEvents() metodunun tipini de buna göre ayarlıyorum.
 

public class EventService
    {
        private static HttpClient httpClient = new HttpClient();
        public async static Task<List<Event>> GetAllEvents()
        {
     List<Duyuru> duyuru_list = new List<Duyuru>();
 
            string result = "";
            try
            {
                               
                    var response = await httpClient.GetAsync("https://99.99.99.99:999/api/Values");
                    if (response.StatusCode == System.Net.HttpStatusCode.OK)
                    {
                        httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                                    
                        result = await response.Content.ReadAsStringAsync();
                     
                                               

                        duyuru_list = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Duyuru>>(result, new JsonSerializerSettings() { StringEscapeHandling=StringEscapeHandling.EscapeNonAscii }) ;

                        foreach (var item in duyuru_list)
                        {
                            //bazı işlemler yapabilirsiniz…
                        }

 
                    }
                

                if (!(duyuru_list?.Count > 0))
                {
                    events.Add(new Event() { AuthorImage = "duyuru.png", Detail = "Yeni Duyuru Bulunmamaktadır.", Title = "Duyuru" });
                }
return events;
            }

            catch (Exception ex)
            {
                string msg = ex.ToString();
                events.Add(new Event() { AuthorImage = "duyuru.png", Detail = "Yeni Duyuru Bulunmamaktadır.", Title = "Duyuru" });

            }


            return events;
        }
    }



 Yukarıda yapıtığım işlemde gelen json veriyi deserialize ederek List<Duyuru> olarak cast ederek dönüştürüyorum. Böylece duyuruları List<Duyuru> tipinde duyuru_list nesnesine atıyorum. Artık amacıma göre veriyi kullanabilirim.

HttpClient Post İşlemi  

public class SampleClass {
private static readonly HttpClient httpclient;

static SampleClass()
{
    httpclient = new HttpClient();    
} 

var url = "http://eserver/method";
var parameters = new Dictionary<string, string> { { "ad", "ezgim" }, { "soyad", "çelik" } };
var encodedContent = new FormUrlEncodedContent (parameters);

var response = await httpclient.PostAsync (url, encodedContent).ConfigureAwait (false);
if (response.StatusCode == HttpStatusCode.OK) 
{
    // gelen veriyle işlemlerinize devam edersiniz
     var responseContent = await response.Content.ReadAsStringAsync ().ConfigureAwait (false);
}

}


Burada key-value şeklinde iki parametreyi post işlemi ile yolladık.

Eğer http işlemlerini uygulamınızda fazlasıyla kullanıyorsanız, her defasında httpclient nesnesi yaratmamaya özen göstermelisiniz. Bu yüzden static bir şekilde global bir nesnesini tanımlayarak HttpClient sınıfını kullandım. Aksi takdirde sunucuya çok fazla request açmış olursunuz ve bu durum socket exhaustion’a sebep olacaktır.

#
Ezgim Çelik
They didn't know it was impossible, so they did it - Mark Twain