C# İle Web API Tetikleme

Merhaba,

Son zamanlarda Asp.NET MVC Web API üzerine odaklanmış bulunmaktayım. Dolayısıyla bu konuya dair akıllara gelebilecek tüm sorulara cevap verebilmek için bir çaba içerisine girmiş bulunmaktayım. Velhasıl bu içeriğimizde, C# ile Web API’nin nasıl tetiklendiğini inceleyecek ve değerlendireceğiz.

Varsayalım, elimizde aşağıdaki gibi bir Web API olsun.

    public class PersonelController : ApiController
    {
        NorthwindEntities db = new NorthwindEntities();
        public List<Personel> GetAll() => db.Personeller.OrderByDescending(p => p.PersonelID).Select(p => new Personel
        {
            Adi = p.Adi,
            SoyAdi = p.SoyAdi,
            Unvan = p.Unvan,
            PersonelID = p.PersonelID
        }).ToList();
        public Personel GetSingle(int id) => db.Personeller.FirstOrDefault(p => p.PersonelID == id);
        public IHttpActionResult PostAdd(Personel personel)
        {
            if (personel != null)
            {
                db.Personeller.Add(personel);
                db.SaveChanges();
                return Ok(personel);
            }
            return Ok("Personel eklenirken bir hata oluştu.");
        }
        public IHttpActionResult PutUpdate(Personel personel)
        {
            if (personel != null)
            {
                Personeller oldPersonel = db.Personeller.FirstOrDefault(p => p.PersonelID == personel.PersonelID);
                if (oldPersonel != null)
                {
                    oldPersonel.GetType().GetProperties().ToList().ForEach(p =>
                    {
                        if (p.Name != "PersonelID" && (p.Name == "Adi" || p.Name == "SoyAdi" || p.Name == "Unvan"))
                            p.SetValue(oldPersonel, personel.GetType().GetProperty(p.Name).GetValue(personel));
                    });
                    db.SaveChanges();
                    return Ok(personel);
                }
            }
            return Ok("Personel güncellenirken hata oluştu.");
        }
        public IHttpActionResult Delete(int id)
        {
            Personeller personel = db.Personeller.FirstOrDefault(p => p.PersonelID == id);
            if (personel != null)
            {
                db.Personeller.Remove(personel);
                db.SaveChanges();
                return Ok(personel);
            }
            return Ok("Personel silinirken bir hata oluştu.");
        }
    }

Öncelikle bu Web API’ye uygun GET ve POST işlemlerinde kullanacağımız modelimizi oluşturalım.

    class Personel
    {
        public int PersonelID { get; set; }
        public string Adi { get; set; }
        public string SoyAdi { get; set; }
        public string Unvan { get; set; }
    }

Şimdi servis görevi görecek sınıfımızı inşa edelim.

    class HttpService
    {
        static string url = "http://localhost:58845/api/";
        static HttpClient client = new HttpClient();

        public static async Task<string> Get(string method)
        {
            string serviceUrl = $"{url}{method}";
            using (var r = await client.GetAsync(new Uri(serviceUrl)))
                return await r.Content.ReadAsStringAsync();
        }
        public static async Task<string> Post(string method, Personel personel)
        {
            string serviceUrl = $"{url}{method}";
            StringContent httpContent = new StringContent(JsonConvert.SerializeObject(personel), Encoding.UTF8, "application/json");
            using (HttpResponseMessage response = await client.PostAsync(serviceUrl, httpContent))
            {
                response.EnsureSuccessStatusCode();
                return await response.Content.ReadAsStringAsync();
            }
        }
        public static async Task<string> Put(string method, Personel personel)
        {
            string serviceUrl = $"{url}{method}";
            StringContent httpContent = new StringContent(JsonConvert.SerializeObject(personel), Encoding.UTF8, "application/json");
            using (HttpResponseMessage response = await client.PutAsync(serviceUrl, httpContent))
            {
                response.EnsureSuccessStatusCode();
                return await response.Content.ReadAsStringAsync();
            }
        }
        public static async Task<string> Delete(string method)
        {
            string serviceUrl = $"{url}{method}";
            using (HttpResponseMessage response = await client.DeleteAsync(serviceUrl))
            {
                return await response.Content.ReadAsStringAsync();
            }
        }
    }

Ve son olarak servis sınıfını kullanarak Web API’yi tetikleyecek metotlarımızı oluşturalım ve projemizi çalıştıralım.

    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("GetAll");
            GetAll();
            Console.WriteLine("******************");
            Console.WriteLine("GetSingle");
            GetSingle(3);
            Console.WriteLine("******************");
            Console.WriteLine("PostAdd");
            PostAdd(new Personel { Adi = "Mustafa", SoyAdi = "Kemal", Unvan = "Atatürk" });
            Console.WriteLine("******************");
            Console.WriteLine("PutUpdate");
            PutUpdate(new Personel { PersonelID = 1043, Adi = "Mustafa1", SoyAdi = "Kemal2", Unvan = "Atatürk3" });
            Console.WriteLine("******************");
            Console.WriteLine("Delete");
            Delete(1061);
            Console.Read();
        }
        static void GetAll()
        {
            string jsonData = HttpService.Get("personel/GetAll").Result;
            List<Personel> personeller = JsonConvert.DeserializeObject<List<Personel>>(jsonData);
            personeller.ForEach(p => Console.WriteLine($"{p.PersonelID} - {p.Adi} {p.SoyAdi}\t\t{p.Unvan}"));
        }
        static void GetSingle(int id)
        {
            string jsonData = HttpService.Get($"personel/GetSingle/{id}").Result;
            Personel personel = JsonConvert.DeserializeObject<Personel>(jsonData);
            Console.WriteLine($"{personel.Adi} {personel.SoyAdi}\t\t{personel.Unvan}");
        }
        static void PostAdd(Personel personel)
        {
            string jsonData = HttpService.Post("personel/PostAdd", personel).Result;
            Personel addPersonel = JsonConvert.DeserializeObject<Personel>(jsonData);
            Console.WriteLine($"{addPersonel.Adi} {addPersonel.SoyAdi}\t\t{addPersonel.Unvan}");
        }
        static void PutUpdate(Personel personel)
        {
            string jsonData = HttpService.Put("personel/PutUpdate", personel).Result;
            Personel addPersonel = JsonConvert.DeserializeObject<Personel>(jsonData);
            Console.WriteLine($"{addPersonel.Adi} {addPersonel.SoyAdi}\t\t{addPersonel.Unvan}");
        }
        static void Delete(int id)
        {
            string jsonData = HttpService.Delete($"personel/Delete/{id}").Result;
            Personel addPersonel = JsonConvert.DeserializeObject<Personel>(jsonData);
            Console.WriteLine($"{addPersonel.Adi} {addPersonel.SoyAdi}\t\t{addPersonel.Unvan}");
        }
    }

Bizler burada herhangi bir authentication bulunmaksızın çalışma gerçekleştirmiş olduk. Bir sonraki içeriğimizde C# ile Token Authentication uygulanmış Web API’yi nasıl tetikleyeceğimizi inceleyeceğiz.

O halde sonraki yazımızda görüşmek üzere diyelim…
İyi çalışmalar…

Bunlar da hoşunuza gidebilir...

1 Cevap

  1. 07 Temmuz 2018

    […] önceki C# İle Web API Tetikleme başlıklı makalemde C# ile Web Api tetiklemeyi incelemiştik. Lakin Token Authentication […]

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

*