Sayfanın yaşam döngüsü:
PreInit -> Init -> Load -> Change/ Click -> PreRender -> UnLoad -> Dispose
using System;
using System.Web;
namespace MyHttpHandlers
{
/*
IHttpHandler arayüzü, HandlerOrnek isimli sınıfımız içerisine iki üye dahil eder.
Bunlardan ProcessRequest isimli metod, gelen talepleri değerlendirebileceğimiz üyedir.
Yani talebe göre Html içeriğini oluşturabileceğimiz bir başka deyişle http isteğini
kendi istediğimiz şekilde ele alabileceğimiz yerdir.
Dikkat ederseniz bu metod parametre olarak HttpContext tipinden bir değişken almaktadır.
Bu değişken sayesinde, Response, Request ve Server nesnelerine erişebiliriz.
Bu da gelen talepler HttpHandler içerisinde değerlendirebileceğimiz anlamına gelir.
IsReusable özelliği ise sadece okunabilir bir özelliktir
ve ilgili HttpHandler nesne örneğine ait referansın başka talepler
içinde kullanılıp kullanılmayacağını belirler.
*/
public class HandlerOrnek : IHttpHandler
{
#region IHttpHandler Members
public bool IsReusable
{
get { return true; }
}
public void ProcessRequest(HttpContext context)
{
string isim = context.Request["Ad"];
context.Response.Write(" Adım : " + isim + "
");
}
#endregion
}
//------------------------- HTTPMODULE ÖRNEĞİ ------------------//
/*
IHttpHandler, uygulandığı tipe iki metod dahil eder. Init ve Dispose.
Init metodu HttpApplication tipinden bir parametre almaktadır ki
bu parametre sayesinde var olan HttpModule olaylarına müdahale etme,
aktif Http içeriğine ulaşma gibi imkanlara sahip olabiliriz.
Dispose metodunu ise, bu sınıfa ait nesne örneği yok edilmeden önce
yapmak istediğimiz kaynak temizleme işlemleri için kullanabiliriz.
Örneğin Module içerisinden kullanılan unmanaged(managed) kaynakların
serbest bırakılması için ele alabiliriz.
*/
class ModuleOrnek : IHttpModule
{
#region IHttpModule Members
public void Init(HttpApplication context)
{
// Save the application
mApplication = context;
context.PreSendRequestContent += new EventHandler(context_PreSendRequestContent);
// http://www.informit.com/articles/article.aspx?p=25339&seqNum=3
// Wire up beginrequest
context.BeginRequest += new System.EventHandler(BeginRequest);
// Wire up endrequest
context.EndRequest += new System.EventHandler(EndRequest);
}
public void Dispose()
{
throw new NotImplementedException();
}
#endregion
#region Bizim eklediklerimiz
private HttpApplication mApplication;
/*
Bakın burada uygulama için PreSendRequestContent isimli bir olay yüklenmiştir.
Bu olay, HttpHandler tarafından üretilen HTML içeriği gönderilmeden önce çalışır.
Böylece bu modülü kullanan bir uygulama içerisindeki herhangi bir sayfa talebinde
gönderilen Http içeriğine "Bu sayfa Z şirketi tarafından üretilmiştir..." cümlesi
bir yorum takısı (comment tag) olarak eklenecektir.
Yazdığımız HttpModullerin ilgili web uygulaması içerisinde geçerli olmasını sağlamak için
yine web.config dosyasında düzenleme yapmamız gerekmektedir.
Bu amaçla, web.config dosyasına aşağıdaki gibi httpModules sekmesini dahil etmemiz
ve yeni HttpModule' ümüzü bildirmemiz yeterli olacaktır.
*/
void context_PreSendRequestContent(object sender, EventArgs e)
{
mApplication.Response.Output.Write("Bu sayfa Z şirketi tarafından üretilmiştir");
}
public void BeginRequest(object sender, EventArgs e)
{
mApplication.Response.Write(
"");
}
public void EndRequest(object sender, EventArgs e)
{
mApplication.Response.Write(
"");
}
#endregion
}
/*
Olay (Event) İşlevi
--------------------- ----------------------------------
BeginRequest Bir talep geldiğinde tetiklenir.
EndRequest Cevap istemciye gönderilmeden hemen önce tetiklenir.
PreSendRequestHeaders İstemciye HTTP Header gönderilmeden hemen önce tetiklenir.
PreSendRequestContent İstemciye içerik gönderilmeden hemen önce tetiklenir.
AcquireRequestState Session gibi durum nesneleri (state objects) elde edilmeye hazır hale geldiğinde tetiklenir.
AuthenticateRequest Kullanıcı doğrulanmaya hazır hale geldiğinde tetiklenir.
AuthorizeRequest Kullanıcının yetkileri kontrol edilmeye hazır hale geldiğinde tetiklenir.
*/
}
Hiç yorum yok:
Yorum Gönder