Access Control Allow Origin Ayarları ve İzin Verme

Javascript ile kendi domaininizde olmayan bir sayfaya request çekmeniz default olarak server tarafında kapalı. Güvenlik nedeniyle olması gerekende bu. Fakat siz bazı durumlarda uzaktaki bir tarayıcıdan bir sayfanıza erişilmesini isteyebilirsiniz. Access Control Allow Origin ve İzin Verme işlemi gerçekleştirerek bu sorunu çözebiliyoruz.

Önceki leaflet ile haritada son depremleri gösterme adlı yazımda basit bir api yazmış, json ile verileri kullanıma sunmuştum. Fakat doğrudan javascript ile bu api’yi çağırmak istediğimde cross-origin kısıtlamasına takıldım. Çözüm oldukça basit.

PHP ile

Uzak çağrıya izin verilecek dosyanın başına şu kod konulmalı:


header("Access-Control-Allow-Origin: *");

ASP.net ile

Uzak çağrıya izin verilecek dosyanın başına şu kod konulmalı:

Response.AppendHeader("Access-Control-Allow-Origin", "*");

.net MVC için

MVC framework için herhangi bir ActionResult’a Data-Annotation ile izin vermek için ActionFilterAttribute sınıfını extend etmemiz ve kendi headerAttribute’mizi oluşturmamız gerekiyor. Önce sınıfımızı oluşturalım:


public class HttpHeaderAttribute : ActionFilterAttribute
{
    public string Name { get; set; }
    public string Value { get; set; }
    public HttpHeaderAttribute(string name, string value)
    {
        Name = name;
        Value = value;
    }

    public override void OnResultExecuted(ResultExecutedContext filterContext)
    {
        filterContext.HttpContext.Response.AppendHeader(Name, Value);
        base.OnResultExecuted(filterContext);
    }
}

Artık herhangi bir fonksiyona data-annotation olarak header ataması yapabiliriz. Örneğimizde access-control-allow-origin olduğu için bu headeri atıyoruz. Örnek;


[HttpHeaderAttribute("Access-Control-Allow-Origin", "*")]
public ActionResult depremler()
{
    //depremleri getiren logic
    return Json( "..." );
}

 

Bir Ekleme : Bütün  bu işlemlerde yazdığımız * işareti (asterix,yıldız) tüm alan adlarına izin ver demek. Eğer siz herkese değilde sadece bir domaine verecekseniz izni, sadece o domain adını yazmalısınız.

Kolay Gelsin.

Bir cevap yazın

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