ASP.NET Web API Uygulaması 2 – ASP.NET Mvc Projesi ile POST-DELETE-GET-PUT işlemleri

Merhaba,

ASP.NET Web API Uygulaması 1 – Postman üzerinden post-get-delete işlemlerinin test edilmesi başlığında, ilk bölümde api projesindeki methodları postman üzerinden denemiştik. Bu bölümde de asp.net mvc projesi oluşturarak crud işlemlerini test edeceğiz.

—spoiler—

Hangi methodları kullandık ?

SendAsync() : Bu method, HttpRequestMessage sınıfına ait bir nesneyi alır ve HttpResponseMessage sınıfına ait nesneyi geri döndürür. Model göndereceğimiz methodlarda kullandık. “hrm.Content.ReadAsStringAsync().Result” diyerek de api den dönen veriyi json data olarak mvc controllerda alacağız.

ReadAsStringAsync(): HttpContent sınıfına ait method. Veriyi string olarak döndürür.Aslında o string formata baktığınızda json tipinde fakat her bir elemanının \ larla ayrıldığını görürsünüz.

GetAsync(): HttpClient sınıfına ait method. Parametre veya model göndermeyeceğimiz zaman kullandık.Parametre olarak api ye ait url i ister. ReadAsStringAsync() ile response olarak döndürdüğü veriyi json data tipinde okuruz.

PostAsync(): HttpClient sınıfına ait method. Insert işlemi gerçekleştirdiğimiz zaman kullandık. ReadAsStringAsync() ile yine kişisel olarak bir mesaj döndürmek istiyorsak,api deki ekleme methodundan dönecek model  e göre bir uyarı mesajı yansıtabiliriz.

DeleteAsync(): HttpClient sınıfına ait method. Delete işlemi gerçekleştirdiğimiz zaman kullandık. ReadAsStringAsync() ile yine kişisel olarak bir mesaj döndürmek istiyorsak,api deki ekleme methodundan dönecek model  e göre bir uyarı mesajı yansıtabiliriz.

PutAsync(): HttpClient sınıfına ait method. Update işlemi gerçekleştirdiğimiz zaman kullandık. ReadAsStringAsync() ile yine kişisel olarak bir mesaj döndürmek istiyorsak,api deki ekleme methodundan dönecek model  e göre bir uyarı mesajı yansıtabiliriz.

kaynak için burayı tıklayabilirsiniz

—spoiler—

Öncesinde api uygulamasını tekrar açıp otantike işlemleri için owin paketini nuget package’tan yükleyeceğiz. Owin nedir ne değildir ile ilgili bilgi içeren bir linki de şöyle bırakayım.

Microsoft.Owin.Security.OAuth, Microsoft.AspNet.WebApi.Owin ve Microsoft.Owin.Host.SystemWeb dll lerini de seçip yüklüyoruz.

1

Şimdi projemize bir klasör daha açıp Startup sınıfı ile uygulama ayağa kalktığında otantike işlemlerini kontrol etmemizi sağlayacak kodları yazacağız.

2

token işlemi için istek yapılacak url,geçerlilik süresi gibi parametreler belirlenir.  AllowInsecureHttp = true ise, otantike işlemlerinde token isteklerinin http URI adreslerine ulaşmasına izin verir.

Provider property si ise yetkilendirme sunucusu ara katmanı tarafından oluşturulan olayları işlemek için uygulama tarafından sağlanan nesne. Uygulama arabirimi tam olarak uygulayabilir veya OAuthAuthorizationServerProvider örneğini yaratabilir ve temsilci yalnızca işleme koymak istediği olaylara atayabilir. (bkz: oauthauthorizationserveroptions)

3

Biz de bu oauthauthorizationserveroptions sınıfından türeyen project sınıfımızla uygulamamıza gelen otantike bilgilerini kontrol edip, db mizde eşleşen veri varsa yeni bir kimlik oluşturup,bu kimliğin sahip olduğu otantike tipi (bearer),rolünü ve subject(konu) ismini veriyoruz ve token işlemi için htpp ayarlarımızda parametrelerimizi set etmiş oluyoruz.

Şimdi mvc projesini oluşturabiliriz. Api projesi oluşturur gibi adımları devam edip template seçtiğimiz ekranda boş template i seçip core referans olarak bu sever mvc yi seçip devam ediyoruz. Ben burada projeye NorthwindWebApp diyorum.

Uygulama açılınca manage nuget ten  system.net.http ve aspnet.webapi.client dll lerini projeye ekliyoruz. Sonrasında jquery ve bootstrap i kullanabilmek için js kütüphanelerini yüklüyoruz,ajax methodlarını da kullanmak için jquery ajax ı da yüklüyoruz.

4

Şimdi de Model klasörü altına api ye gönderilecek ve api den gelecek olan veriler için aynı property lere sahip sınıfları,Login klsörü altına login işlemi için kullanacağımız sınıfı,Proc klasörü altına da sonuçlar ve arama ile ilgili alınacak gönderilecek parametreleri tutacak sınıfları yazıyoruz.

5

Sınıflara ait içerikler aşağıdaki gibi.

5a
5b5c5d5e

Son olarak controllers klasörüne sağ tık>add controller diyoruz ve bir isim verip geçiyoruz.

İlk aşamada controller ın yapıcı methodunda client sınıfında kullanacağımız sabit değerleri set ediyorum.

7.PNG

İstemci sınıfından yeni bir nesne oluşturup, base adress olarak (localhost ta çalıştığım için) local url imizi veriyoruz. Request aşamasında localhost/api/controller/action/parametre diye daha sonra verebiliyoruz. İstek header ında başka kullandığımız parametreler varsa onları temizliyoruz. Son olarak da verinin tipinin ne olacağını belirtiyoruz. Bunlar default ayar olarak kullanılabilir durumda şuan.

Get tipindeki Index action ımızın view ünü oluşturmak için view sağ tık diyerek view ü oluşturuyoruz.

8.PNG

View de login model i çağırıyoruz ve form umuzda bu parametreleri görseldeki gibi kullanıyoruz. Html in çıktısı aşağıdaki gibidir.

10

email ve password girdikten sonraki controller da neler yapacağımızı inceleyelim.

9

ResultToken sınıfından bir örnek alıyoruz. Burada api den dönecek sonucu karşılayacağız. access_token, token_type , expires_in parametrelerini kullanırız.

Dictionary sınıfı ile key value şeklinde bir koleksiyon oluşturuyoruz. Bu koleksiyonda otantike işlemi için grand_type ı ve username ile password u göndereceğiz.

HttpRequestMessage sınıfından aldığımız örnek ile göndereğimiz parametreleri HttpResponseMessage örneğinde SendAsync methodu ile  test ediyoruz. Eğer status kodu ok ise HttpResponseMessage tan aldığımız örneğin context i okumasını söylüyoruz ve dönen değeri resulttoken sınıfı türüne deserialize ediyoruz. Burada aldığımız token değeri 80 karakterden büyükse diye bir kıstas koyarak doğruluğunu teyit ediyorum,ve doğruysa bu token ı cookie ye yazması için key – value şeklinde cevabı set ediyorum.

son olarak SelectedValue action ına yönlendiriyorum.

Debug esnasında HttpRequestMessage örneği içeriği

11

Debug esnasında HttpResponseMessage örneği içeriği

12.PNG

SendAsync methoduyla apiye istek yapıp doğrulamasını yapıp token ı aldı.

13

Deserialize sonrası property lerin aldığı değerler yukarıdadır.

SelectedValue view ü aşağıdaki gibidir. Bu sayfadaki post işlemimizi ajax ile yapacağız. updatetargetid ile dönen verininin (sayfanın) nereye gömüleceğini belirtiyoruz.

$(“#ddd”).html(result); gibi bir davranışı var yani.

14.PNG

Sayfanın görüntüsü; Bu sayfanın amacı da textbox a  yazılmış değeri category sayfasında aramak ve o kategoriye ait ürünleri fiyatları ile listelemek.

15

mvc projesindeki kodlarına bir bakalım.

16

Bu action da api ye yapacağımız istekte authorize olmadan görememe kuralı var,api tarafındaki GetProductOfCategory methoduna bakalım şimdi de,

18.PNG

id parametresi ile gönderdiğimiz kategori adına göre bize o kategoriye ait ürünleri ProductOfCategoryModel sınıfının koleksiyonu ile döndürür. Authorize attribute ü ile de login olmuş olma zorunluluğunu belirtiyoruz.

client.DefaultRequestHeaders.Authorization da bearer token ı cookie de tuttuğumuz __RequestToken key inden alıp set ediyoruz.

response.IsSuccessStatusCode true olduğunda api deki methoddan istediğimiz veriyi içeride okuyup,alıp partialview e gönderip sonucu #ddd id li div in içerisine yazılmasını bekleyebiliriz.

Sonuç aşağıdaki görselde görülmektedir.

19.PNG

Son olarak ekleme ve silme işlemlerine de bakalım.

Ekleme işlemi için mvc projesine bir area ekliyorum work isminde,bu area’da da bir processor isminde bir controller açıyorum, controller içinde Index in yanı sıra birde Add get action ı oluşturuyorum.Bunlara bağlı Index ve Add view leri oluşturuyorum aynı zamanda.

Processor controller ı yapıcı methodu ve index i

20a.PNG

postman de test ederken AllowAnonymous diye nitelediğimiz methodu Authorize olarak değiştiriyoruz. Yetkili isek girmek istiyoruz şuan.

20.PNG

processor index view ü

21.PNG

Sonuç olarak çalıştırdığımızda,otantike olmuş bir şekilde getall methodumuzu çağırdık.

22

Add get action ı ile çağrılacak olan Add view ü içeriğine bakalım;

23

Post action ında controllerda yapılacak işleme bakalım;

24.PNG

Api tarafnda yazdığımız add methodunun erişilebilirliğini yine allowanonymous ı authorize yapıyoruz.

Ekleme işleminde controller tarafındaki sınıfı json a parse edip öyle gönderiyoruz.

Ekleme işlemi sonucunda;

25a


25b.PNG

Silme işlemi için processor controller index sayfa sonuna bir buton koyalım, bu butona bağlı bir de ajax isteği başlatalım. butonun clasında kategori id si var.

33.PNG

Delete methodunda da bu delete işlemini yapacak controller tarafındaki kodları yazıyoruz.

35

api tarafındaki delete işleminin erişilebilirliğini authorize yapıyoruz yine.

Çalıştırıp test ediyoruz.

31


32.PNG

Ve son olarak sayfa yenilenir ve sildiğimiz kayıt gider.

Güncelleştirme işlemi içinde örneğimizi yapıp bitirelim.

36.PNG

Client sayfada kategori adını değiştirmek için sadece bir senaryo hazırladık. değiştirdiğimiz kategori adıyla birlikte diğer verileri json data olarak controller a gönderiyoruz. Buarada “_name” karşısında catChange parametresi olacak.

37.PNG

controller tarafında da üstteki görseli hazırlayıp put işlemi yaptırıyoruz.

38

Çıktısı da aşağıdaki gibidir.

39.PNG

Sonuç olarak asp.net mvc projemizden api ye istekleri gönderdik cevaplarımızı aldık,bunu yaparken bearer token authentication type ı da kullandık böylece yetkili kullanıcı sistemdeyken erişebileceği methodları çağırdık.

Bir sonraki yazımız da apachi cordova ile bu test işlemlerini gerçekleştiriyor olacağız.

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s