OWIN Katmanı Olarak ASP.Net Web API

   OWIN makale serimizde son hızla devam ederken durup geldiğimiz noktaya bir bakacak olursak platform ve uyguma bağımsız olarak olarak katmanlarımızı sunabildiğimizi görebiliriz. İster Katana ile üçüncü parti bir uygulama kullanarak, ister IIS üzerinden, hatta istersek de kendi geliştirdiğimiz bir uygulama üzerinde.. Bu örnekler çoğaltılabilir…

   Şimdiye kadar konuyu basit tutabilmek adına sadece OWIN katmanları ile ilgilenerek basit bir katman ve içerik üzerinden gittik. Oluşturduğumuz içerik dinamik; fakat basitti. Gerçek hayat örneklerine baktığımızda şüphesiz ki daha kompleks uygulamalar söz konusudur. Bu sebeple bu makalemde gerçek hayatta kullanabileceğimiz örnekleri/katmanları incelemek istedim. İlk hedefimiz OWIN katmanlarımız arasına ASP.Net Web API’yi de katarak web uygulamamızda da Web API’yi kullanabilmek…

   Bir OWIN katmanı olarak ASP.Net Web API’nin kullanımını konuya sıfırdan girmemek adına bir önceki makalemde paylaştığım kendi uygulamamız üzerinden devam edeceğim. Bu makaledeki amacımız kendi uygulamamız üzerinde sunduğumuz OWIN katmanları arasına ASP.Net Web API’yi de eklemek olacak.

   Şanslıyız ki Web API’yi OWIN katmanı olarak kullanmak için çok fazla uğraşmamıza gerek yok. ASP.Net Web API ekibi çoktan bu konuda kolları sıvayarak bizlere bir katman sundu bile. Bu katmanı kullanabilmek için önceki projemize Microsoft.AspNet.WebApi.Owin NuGet paketini kurmamız yeterli…

Install-Package Microsoft.AspNet.WebApi.Owin -Pre

Microsoft.AspNet.WebApi.Owin NuGet paketi kurulumu

 

   Aslına bakarsanız bu adım ardında yapacağımız çok fazla da bir şey yok. Artık aynı standart bir Web API uygulamasında olduğu gibi http route’larını belirleyip ardından da web api katmanının kullanılmasını söylememiz yeterli olacaktır. Bu sebeple önceki makalemde paylaştığım kod içerisinde sadece Startup sınıfında değişiklik yapacağız;

using System.Web.Http; 
using Owin;

namespace Enterprisecoding.OWINKonsolUygulamasi { 
    internal class Startup { 
        public void Configuration(IAppBuilder app) { 
            var config = new HttpConfiguration(); 
            
            config.Routes.MapHttpRoute( 
                name: "DefaultApi", 
                routeTemplate: "api/{controller}/{id}", 
                defaults: new { id = RouteParameter.Optional } 
            );

            app.UseWebApi(config); 
        } 
    } 
}

   Bu kadar basit… Son olarak; ASP.Net Web API’nin düzgün şekilde kurulduğunu test edebilmek için konsol uygulamamızda Controllers adıyla bir klasör oluşturup içerisinde aşağıdaki kodlarla TestController sınıfı oluşturalım;

using System.Web.Http;

namespace Enterprisecoding.OWINKonsolUygulamasi.Controllers { 
    public class TestController : ApiController { 
        public string Get() { 
            return "Owin üzerinde ASP.Net Web API testi"; 
        } 
    } 
}

TestController.cs dosyası

   Bu kod ile birlikte uygulamamızı çalıştırdığımızda sunucu ayağa kalkacak ve gelen istekleri karşılamaya başlayacaktır. Gelen isteklerden yukarıda verdiğimiz şablona uygun adrese sahip olanlar Web API tarafından karşılanacaktır.

   Sistemin çalıştığını kontrol edebilmek için cURL uygulaması ile istek göndermeniz yeterli olacaktır. Sisteminizde cURL kurulu değilse merak etmeyin bir süre önce bahsettiğim Chocolatey sayesinde bunu hızlıca çözebiliriz 😉

cinst curl

Chocolatey ile curl kurulumu

   Sonrasında aşağıdaki komutla uygulamanızı test edebilirsiniz;

curl http://localhost:8080/api/test -i

curl kullanarak uygulamamıza yaptığımız istek

   Veee.. taaa.. taam 🙂 Bu kadar basit… Gördüğünüz gibi yaptığımız isteği uygulamamız karşıladı ve yazdığımız kontroller kodu devreye girerek JSON formatında yanıtımız geldi. Eğer varsayılan olarak gelen JSON yerine Xml yanıt isterseniz bu da kolay; tek yapmanız gereken Startup sınıfınızı aşağıdaki şekilde düzenlemek;

using System.Web.Http; 
using Owin;

namespace Enterprisecoding.OWINKonsolUygulamasi { 
    internal class Startup { 
        public void Configuration(IAppBuilder app) { 
            var config = new HttpConfiguration(); 
            
            config.Routes.MapHttpRoute( 
                name: "DefaultApi", 
                routeTemplate: "api/{controller}/{id}", 
                defaults: new { id = RouteParameter.Optional } 
            );

            config.Formatters.XmlFormatter.UseXmlSerializer = true; 
            config.Formatters.Remove(config.Formatters.JsonFormatter);

            app.UseWebApi(config); 
        } 
    } 
}

cURL isteği ve alınan xml yanıt

Fatih Boy

Ankara'da yaşayan Fatih, bir kamu kurumunda danışman olarak çalışmaktadır. ALM süreçleri, kurumsal veri yolu sistemleri, kurumsal altyapı ve yazılım geliştirme konularında destek vermektedir. Boş zamanlarında açık kaynak kodlu projeler geliştirmeyi ve bilgisini yazdığı makalelerle paylaşmayı seven Fatih, aynı zamanda Visual C# ve Visual Studio teknolojileri konusundan Microsoft tarafından altı yıl üst üste MVP (En Değerli Profesyonel) ödülüne layık görülmüştür. İş hayatı boyunca masaüstü uygulamaları, web teknolojileri, akıllı istemciler gibi konularda Asp.Net, Php, C#, Java programlama dilleri ve MySql, MsSql ve Oracle gibi veritabanı yönetim yazılımları ile çalışmıştır. İngilizce ve Türkçe olarak yayınlanan makalelerini gerek İngilizce bloğunda, gerekse de Türkçe bloğunda bulabileceğiniz gibi web sitesinden de açık kaynak kodlu geliştirdiği yazılımlarına ulaşabilirsiniz. vCard - Twitter - Facebook - Google+

Bir Cevap Yazın

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