Bir önceki yazımızda XMLHttpRequest nedir, nasıl kullanılır ve kullanılırken ne gibi sorunlar ile karşılaşılır şeklinde bir incelemede bulunmuştuk.
Bu yazıda ise ASP.NET MVC tabanlı bir uygulamada javascript ile XMLHttpRequest göndermeyi ve karşılaşılan sorunları inceleyeceğiz.
Bir önceki yazımızda, bir XMLHttpRequest gönderme işleminin uygulama sunucusuna yapılması durumunda bir sorunla karşılaşmayacağımızdan ancak dışarıdaki bir sunucuya istek gönderirken bir yetki sorunuyla karşılaşacağımızdan bahsetmiştik.
Şimdi ASP.NET MVC uygulamasında bulunan bir controller sınıfındaki JsonResult döndüren bir action metoduna XMLHttpRequest göndermeye çalışalım.
public class HomeController : Controller { public JsonResult Application() { var jsonResult = new { Name = "XMLHttpRequest Applcaition", Date = DateTime.Now.AddDays(-5).ToShortDateString() }; return Json(jsonResult, JsonRequestBehavior.AllowGet); } }
Basit bir JSON nesnesi döndüren bir metod olşuturduk. Şimdi View tarafından bu metoda bir XMLHttpRequest gönderelim. Yani kendi uygulamamızı sunan sunucuya bir XMLHttpRequest gönderelim ve internet tarayıcımızın tavrına bakalım.

İnternet tarayıcımız hiç itiraz etmeden sorguyu Javascript aracılığı ile başarılı bir şekilde almıştır.
Şimdi de uygulama sunucumuzun dışındaki bir sunucuya istek(request) göndermeye çalışalım ve sonucu görelim.

Tarayıcımız kodu derlerken bize bir itirazda bulundu. Hata “Erişim Engellendi” şeklinde. İnternet tarayıcımız bize uygulama sunucumuz dışına çapraz(cross) sorgu gönderme izni vermiyor ve ağ iletişimini kapatıyor.
Bu sorunu aşmak için uygulama sunucumuza bir istek gönderip, uygulama sunucumuz üzerinden ilgili sorgunun sonucunu almaya çalışacağız. Yani arka kapıdan dolaşmak zorunda kaldık.
Şimdi projemize bir Proxy uygulaması oluşturup bu uygulama üzerinde işlemi deneyelim. Projemize Proxy adında bir dizin açıp içerisine Proxy.ashx adında bir Generic Handler ekleyelim.
public class proxy : IHttpHandler { public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; WebRequest request = WebRequest.Create("http://www.google.com"); WebResponse webResponse = request.GetResponse(); Stream responseStream = webResponse.GetResponseStream(); if (responseStream != null) { StreamReader reader = new StreamReader(responseStream); context.Response.Write(reader.ReadToEnd()); } } public bool IsReusable { get { return false; } } }
Javascript üzerinden bu proxy’ye XMLHttpRequest göndereceğiz ve proxy’nin elde ettiği sonucu kullanacağız.

Olay bu kadar basit aslında. Bu şekilde istediğimiz sosyal paylaşım sitelerine, değişik hizmetler sunan web servislerine Javascript üzerinden erişebiliriz.
Bu yöntem, CBS tarzı harita uygulamalarında farklı yerlerde barınan sunuculara Javascript API’ler üzerinden sorgu gönderirken çok işe yarıyor. Örneğin Map servislerini bir sunucudan, Harita resimlerini başka bir sunucudan, kişi bilgilerini ayrı bir servis üzerinden çekip tek bir sunum ortamında faydalanmak mümkün hale gelebiliyor. Farklı çözümlerde bu yöntemi kullanmak size kalmış.
Bir sonraki yazıda görüşmek dileğiyle.
Bu çok iyi ya twetter verilerini çekmek için kullanılabilir. Paylaşım için teşekkürler.
sayaç.php dosyasını asp sayfa içerisinde bu yolla nasıl koyabilirim acaba?
@Emrullah aslında konunun asp veya php ile bir alakası yok. Hangi ortamda olursa olsun biz sorguyu Javascrip ortamından sunucuya doğru gönderiyoruz. Yani frontend taraflı bir işlemdir. Asp sayfası dediğiniz sayfada da bir script tag açarak request’inizi sayac.php neredeyse o adrese(URL) doğru gönderebilirsiniz. Tabi arada yukarıdaki gibi bir proxy olduğunu unutmayın.