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…
