-- ASP.NET Web API

ASP.NET Web API : CORS(Cross-Origin Resource Sharing) İsteklerini Aktifleştirmek

Merhaba,

Bir web geliştiricinin(özellikle javascript/ajax vb.) muhakkak karşılaşacağı CORS politikalarını bilmeyen arkadaşlar başlıktaki adıyla araştırırsa memnun oluruz. Bildiğinizi ve ASP.NET Web API uygulamanıza yaptığınız Ajax sorgularınızın cross-domain engeline takıldığını varsayalım. Ne yaparız?

ASP.NET Web API’de CORS’u aktifleştirerek cross-domain sorunlarını ortadan kaldırabiliriz.

1. Yöntem : Web API Cors ile…

Visual Studio Nuget Package Manager ile gerekli kurulumu yapalım.

Install-Package Microsoft.AspNet.WebApi.Cors

– WebApiConfig.cs ile Global Seviyeli Kurulum

Register metodu içerisine aşağıdaki tanımlamayı yapıyoruz.

var cors = new EnableCorsAttribute("*","*","GET"); // origins, headers, methods
config.EnableCors(cors);

Parametre olarak görülen *(yıldız) karakterleri ‘Hepsi’ anlamına geliyor. İlk parametre hangi domain’lere erişim verilmek istendiğini belirtir. * koyarak tüm isteklere cevap verilmesi gerektiğini belirttik.
Ancak aşağıdaki gibi de yapılabilir;

var cors = new EnableCorsAttribute("http://cihanozhan.com","*","GET"); // origins, headers, methods
config.EnableCors(cors);

Birden fazla domaine erişim vermek istersek;

var cors = new EnableCorsAttribute("http://cihanozhan.com, http://dijibil.com","*","GET"); // origins, headers, methods
config.EnableCors(cors);

şeklinde aralara virgül konarak kullanılabilir.

ApiController’da CORS Kullanımı

[EnableCors("*", "*", "GET")]

Yukarıdaki bu tanımlamayla birlikte tüm domainlerden gelen tüm GET isteklerine cevap verileceği belirtilmiştir. EnableCors attribute’ü bir Controller üzerinde kullanılabileceği gibi tek bir Action için de kullanılabilir. Bu attribute’ün class ve action için geçerli olduğunu attribute nesnesini inceleyerek görebilirsiniz. EnableCors attribute’üne sağ tıklayıp “Go to Definition” menüsüne tıkladığınızda kaynak kodların özetini görebilirsiniz. Şu şekilde;

Ekran Alıntısı

Temel kullanımı ise şu şekilde örneklenebilir…

[EnableCors("http://dijibil.com", "*", "GET")]

Yukarıdaki tanımda dijibil.com’dan gelecek GET isteklerine cevap verileceği belirtilmiştir.

cihanozhan.com’dan gelecek GET ve POST isteklerine izin vermek içinse aşağıdaki tanım kullanılabilir.

[EnableCors("http://cihanozhan.com", "*", "GET, POST")]

Daha detaylı örneklemeler yapılabilir ancak konunun anlaşıldığını umuyorum.

2. Yöntem : OWIN ile…

Öncelikle NuGet Package Manager Console’u açarak aşağıdaki CORS paketini kurun;

Install-Package Microsoft.Owin.Cors 

Sonraki adımda ASP.NET Web API’nin Startup.cs dosyasında bulunan Configuration metoduna şu kodu ekleyin;

appBuilder.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);

Kodu ekledikten sonra aşağıdaki gibi görünecektir;

ConfigureOAuth(appBuilder);

WebApiConfig.Register(httpConfiguration);
appBuilder.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
appBuilder.UseWebApi(httpConfiguration);

İyi çalışmalar.
Cihan Özhan

Yorumla

Yorum