Merhaba Arkadaşlar,
Bu bölümde sizlere .Net Core 2.0 çatısı altında Response Formatter filter'ı geliştirerek action larımızı ve viewresult larımızı nasıl daha esnek kullanacağımızı anlatmaya çalışıcam.Amacımız projemiizde yazılmış olan action larımıza json ve xml response larını filter yatarak attribute ile dışarıya servis etmek.
Öncelikle bir tane .Net Core 2.0 projesi açıyoruz.(Ben vs 2017 kullanıyorum) Projemizi açtıktan sonra Microsoft.AspNetCore.Mvc.Formatters.Xml.Extensions paketini nuget üzerinden dahil ediyoruz. Bu paketi xml formatında verilerimizi dönmek için kullanacağız.
Nuget : Install-Package Microsoft.AspNetCore.Mvc.Formatters.Xml.Extensions -Version 2.0.0
İşlem tamamlandıktan sonra StartUp.cs dosyasına gelerek genişletilmiş method olan
AddXmlFormaterExtensions() methodunu ekliyoruz.
Sonrasında projemizde Filters klasörü altına FormatReponseFilter isimli attribute sınıfımızı ekliyoruz.
Kısaca buradaki methodların işleyişinden bahsedicem.
Controller a istek geldiğinde OnActionExecuting methodu çalışacak format parametereli querystring den gelen değeri alıcak ve RequestedType isimli değişkenimize set edicek.
Ardından OnActionExecuted methoduna giricek burada format tipine göre Result'ı set edicek. Burada result'ın model deki verilerine erişmemiz için ModelFromActionResult methodunu kullanacak. Size bu method daki case leri istediğiniz kadar genişletebilirsiniz. Ama zaten bu methoda sadece ViewResult veya PartialViewResult gibi model dönebildiğimiz yöntemlerde girecek.Bu method üzerinden model return edilecek ve json yada xml e dönüştürülerek Result nesnesine set edilecektir.
Ben herhangi bir veritabanı kullanmadan direk statik verilerle çalışacağımdan Models klasörü altına UserModel isimli bir class ekledim. HomeController/Index te statik veriyi oluşturarak View e return ettim.
Sadece bu actiona json ve xml formatını dahil etmek istediğim için [FormatReponseFilter] attribute ünü ekledim.
Bütün işlemlerimiz tamamlandı. Artık bu action'ımıza json ve xml özelliğide kazandırmış olduk. Tek yapmamız gereken ?format=json yada ?format=json parametresini koyarak action ımızı çağırmak.
Umarım faydalı bir makale olmuştur
Saygılarımla