Generic Handler (.ashx) ve Session erişimi
Tarih 14 Ocak 2010 Perşembe, 04:00 | Etiket(ler) Asp.Net
Pek çoğumuz Generic Handler'lar (.ashx) dosyaları oluşturur xml, css, javascript, text vs. gibi dosya ve verileri duruma göre bu dosyalar üzerinden servis ederiz. Sitemizin kullanıcı bazlı davranışlarında veya başka durumlarda generic handler'lar vazgeçilmez kullanım şekillerinden biridir. Ben genelde ajax ile xml verisi okuyacağım yerlerde generic handler kullanmayı tercih ederim. SiteMap ve Rss servislerini de bu şekilde sunmayı tercih ederim. Kişiye özel veri okunmak ve manipule edilmek istediğinde session'lar aracılığıyla bu verileri transfer etmeyi ve değiştirmeyi tercih ettiğimiz durumlarda generic handler'lar ilk yaratılışlarında bu duruma müsade etmezler. Generic handler içinden session okumam veya yazmam gereken bir projede biraz araştırma ile sorunu şu şekilde çözdüm. Buradan paylaşayım ve bu sorunla karşılaşanların derdine derman olsun istedim.
Generic handler ilk oluşturulduğunda aşağıdaki gibi bir görüntüyle karşılaşırız
Imports System
Imports System.Web
Public Class Handler : Implements IHttpHandler
Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
context.Response.ContentType = "text/plain"
context.Response.Write("Hello World")
End Sub
Public ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable
Get
Return False
End Get
End Property
End Class
İçerisinden session okumak istediğimizde yapmamız gereken sadece handler'ımıza session'ı sadece okumak için
IReadOnlySessionState i, session'ı hem okumak hem de yazmak için ise
IrequiresSessionState interface lerini eklemektir. Sonuç olarak session okumak ve yazmak için aşağıdaki gibi bir handler işinizi görecektir.
Imports System
Imports System.Web
Public Class Handler : Implements IHttpHandler, IRequiresSessionState
Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
context.Response.ContentType = "text/plain"
context.Response.Write("Adı : " & context.Session("ADI").ToString & "")
context.Response.Write(vbCrLf)
context.Response.Write("Soyadı : " & context.Session("SOYADI").ToString & "")
context.Response.Write(vbCrLf)
context.Response.Write("User IDsi : " & context.Session("UID").ToString & "")
context.Response.Write(vbCrLf)
context.Response.Write("Tarih : " & context.Session("TARIH").ToString & "")
context.Session("ADI") = "Değiştir"
context.Session("SOYADI") = "Bakalım"
context.Session("UID") = "13"
context.Session("TARIH") = DateTime.Now.ToString
context.Response.Write(vbCrLf)
context.Response.Write("Sayfayı yenilediğinizde session değerleri değişecek")
End Sub
Public ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable
Get
Return False
End Get
End Property
End Class
Projenin çalışan halini indirmek için tıklayınız
Yorumlar
Bu yazıya henüz yorum yapılmamış. İlk yorumu siz yapmak isterseniz aşağıdaki formu doldurabilirsiniz.
Yorum yazın
Geri Dön | Ana Sayfaya Dön