Wep Api ile RequestHeader okuma

Requestler header, method, content  vs birden çok bilgi içeriyorlar (Http Request).

Peki headerdaki bir değere, Web api metodunda nasıl kullanışlı bir biçimde erişebiliriz.

İlk akla gelen Request objesi üzerinden headers a ulaşmak , şöyle ki :

her erişmek istediğimizde bu kodu yazmak yerine ihtiyaç olan yerlere HttpParameterBinding kullanarak erişmek, parametre için type  (int, string vs) casting işlemlerini merkezi bir şekilde yönetmek için web api nin nimetlerinden yararlanırsak:

 

Parametrelerde binding yapabilmek için ParameterBindingAttribue kullanırız.

Bu attribute kullanırken constructor da belirtildiği gibi requestHeader da hangi isimde parametre geleceğini söylememiz gerekiyor.

Örnek :

Eğer sıkça kullanmamız gereken ya da string olarak header name belirttiğimiz için yanlış yazma durumu oluşmamasını istediğimizde ise FromHeaderAttribute’den miras alarak özelleşmiş tipleri yapabiliriz.

Örnek :

Yukardaki LanguageHeaderAttribute sınıfı “Language” isminde request header değeri arayacak ve onun ilk değerini (string listesi olarak geldiği için ilkini almıştık) metod parametrelerinden belirtilene binding yapacaktır.

Örnek :

Metod içerisinde lang değerinin headerdan okunup getirildiğini uygulamanızda görebilirsiniz.

 

 

Asp.Net 400 Hata Koduyla Json Mesaj Dönme

Aşağıdaki kod parçasını 400 (Bad Request) le beraber Json mesaj dönmek için kullanıyoruz.

 

Localhost için gayet güzel çalışırken Azure ya da sunucu üzerine deploy ettiğinizde sürekli “Bad Request” hatası alıp içeriğinde ise yazdığımız Json bilgisi olmayabilirBunun başlıca sebebi IIS in belirttiğiniz hata kodu (burdaki 400) için sizin response değerini eziyor olmasıdır.

Çözüm:

  1. Web.config içerisine aşağıdaki satırları eklemek
  2. Kod içerisinde Response.TrySkipIisCustomErrors = true; set etmek.

Daha fazlası için:

http://msdn.microsoft.com/en-us/library/ms690576(v=vs.90).aspx

KnockoutJS Nedir?

KnockoutJSSteven Sanderson  tarafından geliştirilmiş bir JavaScript kütüphanesidir. Bu kütüphane ile kullanıcı etkileşimini artırmak amaçlanmıştır. Knockout Modelleri kullanılarak oluşturulan Dinamik (özellikleri değişebilen) elemanlar gelişmiş bir etkileşim desteği sunuyorlar. Kütüphane MVVM kalıbını(pattern) uygulamaktadır.

MVVM(Model View ViewModel):

MVVM, Model, View ve ViewModel adında 3 yapıdan oluşmaktadır.  Amaçları arasında arayüz yapan kişinin arka tarafta nasıl bir iş geliştirildiğini bilmeden işini yapabiliyor olması, daha çabuk genişlemeye müsait bir yapıyı ortaya çıkarması sayılabilir. Model, verileri temsil etmektedir. View kullanıcıya sunulan görüntü, ViewModel ise asıl işin geliştirildiği yapıdır. View’ın Model i bilmesine gerek yoktur. ViewModel aracılık yapmaktadır.

knockoutjs.com adresinden .js dosyasını indirebileceğiniz gibi cdn’leri de kullanabilirsiniz. Enson sürüm olan knockout-3.0.0.js ‘i Asp.net MVC projesinde kullanımını bakacak olursak.

Öncelikle boş bir MVC projesi açıyoruz. 

 

Daha sonra “KnockoutJSController” adında bir controller ekliyoruz ve Index view’ini oluşturuyoruz. “RouteConfig”  sınıfından Default olarak tanımladığımız “KnockoutJSController” controllerini ve “Index” view adını veriyoruz ki controller adı ve view adı verilmezse buralara yönlendirsin.

Projede knockout.js kullanabilmek için doğrudan indirilen dosya kullanılabileceği gibi “Nuget Package Manger” sayesinde de projeye eklenebilmektedir. “Install-Package knockoutjs” komutu ile projeye KnockoutJS i ekliyoruz.

 

Boş proje açtığımız için bundles ile ilgili bir ayar sınıfı gelmemiş fakat istenirse ayrıyeten de yazılabilir. Knockoutjs, <script> etiketleri kullanılarak da eklenebilir.

 Örnek ViewModel:

Örnek ViewModel yukardaki gibi tanımlanıp “ornek1Model.js” adında oluşturuldu.  Bu bildiğimiz JavaScript fonksiyonu şeklindedir.

Bunu View’e aşağıdaki şekilde eklersek.

Yukarıda görüldüğü üzere KnockoutJS ve ViewModel scriptleri harici olarak dahil edilmektedir. “<span>” elemanlarında ise “data-bind=” ve bunun eşitliğindeki “text:”  dikkati çekmektedir. Bunlar knockout ‘un yönettiği parametler olarak karşımıza çıkıyor. Yani “data-bind” gördüğü zaman o elemanı viewmodel ile ilişkilendirmesi gerektiğini anlıyor. Eşitliğinde bulunan özellikleri ViewModel’a uygun şekilde isteneni gerçekleştiriyor.

Kısaca yukarda “text:isim” ile “data-bind” niteliği verilmiş elemanın “text” özelliğini ViewModel’de bulunan “isim” değişkeniyle oluşturmasını istiyoruz. Bunun sonucunda da aşağıdaki görüntüyü elde ederiz. 

İsim ve soyisim değerini “input” elemanında göstermek istersek de “text” yerine “value” kullanılır.

Eğer değişkenleri “Observable” olarak tanımlarsak knockout bizim için bu değişkenleri izler ve değişiklik olduğunda aynen yansıtır. Bunu aşağıdaki örnekte görebiliriz.

ViewModel’i şu şekilde güncellersek:

View’ı da şu şekilde güncellersek:

Farklılık olarak “valueUpdate: ‘afterkeydown’ “ ve “computed” göze çarpanlar olarak karşımıza çıkıyor. “valueUpdate: ‘afterkeydown’” bizlere adında da anlaşılacağı üzere tuşa basıldıktan sonra ViewModel’a git ve ilgili değişkeni yeni değeriyle güncelle demektedir. Bu sayede aynı anda diğer ilişkili yerler de güncelleme gerçekleştirilecektir.

“computed” bir fonksiyon olarak karşımıza çıkmaktadır. Bu sayede ViewModel’da bulunan değişkenlerle ilgili işlemler gerçekleştirebiliriz. Üretilen bir değer olduğu için kullandığı değerler değiştiğinde otomatik olarak ilgili yeri güncellemektedir.

 

Uygulama görüntüsü: 

Görüldüğü gibi aynı anda güncelleme gerçekleştirilebilmektedir. 

Proje Dosyası: KnockoutJS-OrnekProje.rar (1,29 mb)