HttpHandler Webserice ile jQuery KullanmakBu yazıda ASP.net webServicekullanmak yerine bize xml olarak çıktı vermeyen Generic Handler ile jQuery‘i nasıl konuştururuzun cevabını alacağız. Ajax yöntemi ile mail gönderen bir uygulamayı anlatacağım.Bunun için öncelikle gerekli servis parametrelerini kontrol edebilmek için bir BaseService sınıfı oluşturmalıyız. Bu sınıfın 3 methodu var ParametersControl, GetParameter ve dışarıya çıtkı verebilmemiz için OutResponse methodları//işlem için bir command parametresi var mı yok mupublic void ParametersControl(){if (string.IsNullOrEmpty(this.Context.Request.QueryString[“command”]) && string.IsNullOrEmpty(this.Context.Request.Form[“command”])){this.Out = “Parameter Expcetion”;this.OutRepsonse();}if (!string.IsNullOrEmpty(this.Context.Request.QueryString[“command”])){this.Command = this.Context.Request.QueryString[“command”];}if (!string.IsNullOrEmpty(this.Context.Request.Form[“command”])){this.Command = this.Context.Request.Form[“command”];}}
Burada servisi tetiklerken bir komut parametresi bekliyoruz eğer gönderilmezse yanıt olarak Parametre hatası veriyor.//Parametre okuyucupublic string GetParameter(string parameter){//Eğer parametre okurken bir hata göndermesini istiyorsanı bu değişkeni kullanabilirsiniz.//Şuan methodda okunmak istenen parametre bulunamazsa string.Empty olarak geri dönüyor.bool fail = false;if (string.IsNullOrEmpty(this.Context.Request.QueryString[parameter])){fail = true;}else{return this.Context.Request.QueryString[parameter];}if (string.IsNullOrEmpty(this.Context.Request.Form[parameter])){fail = true;}else{return this.Context.Request.Form[parameter];}return string.Empty;}
Kullanacağımız Handler’da artık base.GetParameter(“email”) diyerek parametre hangi methodla gelirse gelsin okuyor olabileceğiz. Son olarakta servis sonucu çıkarabilmemiz için OutResponse’u yazmamız gerekiyorpublic void OutRepsonse(){this.Context.Response.ContentType = “text/plain”;this.Context.Response.Write(this.Out);this.Context.Response.End();}
Bu sınıfın tamamına bu adresten ulaşabilirsiniz. Projenize eklemeniz yeterlidir.

İşin en basit kısmını hallettik sırada Generic Handler(ashx) dosyamızı oluşturmak var. Bu Handler daha once yazdığımız BaseService’ten miras almak zorunda Bunun için sınıfın tanımı aşağıda ki gibi olmalıdır.public class Contact : BaseService, IHttpHandler{…}
Handlera istek yapıldığında çağırılan method ProcessRequest‘tir. Bu .aspx dosyalarında ki Page_Load gibidir. Bizim yapmamız gereken işlemimizi gerçekleştireceğimiz kodları bu method içerisine yazmamızdır.public void ProcessRequest(HttpContext context){//baseService sınıfımızın atamalarını gerçekleştirelimbase.Context = context;base.ParametersControl();//parametrelerde bir problem var mı kontrolübool fail = false;if (base.Command == “send”){#region Special Parameter Controlif (string.IsNullOrEmpty(base.GetParameter(“name”))){fail = true;}if (string.IsNullOrEmpty(base.GetParameter(“mail”))){fail = true;}if (string.IsNullOrEmpty(base.GetParameter(“content”))){fail = true;}#endregionif (!fail) //parametrelerde bir sorun yoksa{string mailFormat = string.Format(“{0} ({1}) {2}”, base.GetParameter(“name”), base.GetParameter(“mail”), base.GetParameter(“content”));//mail gönderme işlemlerinizi burada yapabilirsiniz.Mail.SendEmail(Settings.Read(“GMAIL_ACC”), Settings.Read(“GMAIL_PASS”), Settings.Read(“CONTACT_MAIL”), Settings.Read(“MAIL_TITLE”), mailFormat, System.Web.Mail.MailFormat.Text, string.Empty);this.Out = “OK”;}elsethis.Out = “FALSE”;}base.OutRepsonse();}

C# ile ilgili yazmamız gerekenler bu kadar. Biraz karışık gözüküyor olabilir ama bir iki denemeden sonra aslında işin mantığının ne kadar basitolduğunu kendinizde görebilirsiniz.
Bu yöntem ile isterseniz bir php sayfası hatta sıradan bir HTML’den bile mail gönderme işlemi yapabilirsiniz. Yapmanız gereken 3 input textbox birde submit butonu.jQuery ile yapmamız gerekenler ise çok basit;$(document).ready(function() {/* Objects */var btnSend = $(“#btnSend”);/* Events */btnSend.click(function() {//işlem bitene kadar bir daha düğmeye basılmasınbtnSend.unbind(“click”);sendMail();});/* Functions */var sendMail = function() {$.ajax({url: ‘/api/contact.ashx’,data: “command=send&name=” + name.val() + “&content=” + content.val() + “&mail=” + mail.val(),cache: false,dataType: “text”,success: function(result) {if (result == “OK”) {alert(‘Mesajınız gönderilmiştir.’);}else {alert(‘Lütfen bütün alanları doldurun’);}btnSend.bind(“click”, sendMail);}});}});
Örnek uygulama için tıklayın, İlk defa bir makale için bu kadar uğraştım umarım anlattığıma değmiş size faydalı bir yazı olmuştur.