Selam Arkadaşlar,
Bu yazımda .Net Rest Api “No ‘Access-Control-Allow-Origin'” hatasının çözümünden bahsedeceğim. Rest Api projemizi oluşturduğumuzda bu servisi başka uygulamalarda ya da mobil bir uygulama yazıyorsak eğer burada rest servisini kullanarak veri alışverişi yapmamız gerekir. İlgili verileri oluşturup sonuç olarak bunları listeleyebilir, yeni kayıt ekleyebilir güncelleyebilir ya da silebiliriz. Yani CRUD işlemlerini yaparız. Bu işlemlerimizi sağladığımızda projemizi çalıştırdığımızda bu işlemler sorunsuz bir şekilde çalışmaktadır. Fakat başka bir uygulamadan bu servisimize erişmeye çalıştığımızda ise “No ‘Access-Control-Allow-Origin'” hatasını alırız. Bu hatayı aldığımızda ilk olarak aklımıza CORS(Cross Origin Resource Sharing) gelmelidir. Bu hatayı almamızın sebebi ise farklı bir kaynağa erişip istek yaptığımızda hem tarayıcımız hem de kaynağımızın birbirine güvenmesi gerekmektedir. Bu yüzden bir tanımlama yapmamız gerekmektedir.
Öncelikle bu tanımlamayı yapabilmemiz için Nuget Package Manager üzerinden Microsoft.AspNet.Cors isimli paketi yüklememiz gerekiyor. Bu paket yüklemesini gerçekleştirdikten sonra App_Start klasöründeki WebApiConfig.cs dosyamızı açıyoruz. Daha sonra içerisine aşağıdaki kodumuzu yazıyoruz.
config.EnableCors(new EnableCorsAttribute("*", "*", "*"));
Namespace’lerin eklenmesini sağlayıp hataların çözümlenmesini sağlıyoruz. Bu işlemleri yaptıktan sonra dosyamız aşağıdaki gibi bir görünüme sahip olacaktır.
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.EnableCors(new EnableCorsAttribute("*", "*", "*"));
}
}
Bu işlemi gerçekleştirdikten sonra cors ayarlarımızı artık bir sorun oluşturmayacaktır. Başka bir uygulamamız üzerinden Rest Api’mize istek yaptığımızda böyle bir hata ile karşılaşmayacağız. İsteklerimiz düzgün bir şekilde çalışacaktır.
Umarım faydalı olur.
Bir sonraki yazıda görüşmek üzere…