Merhabalar,
Bu makalemde geleneksel olarak kullanılan Rewriting yerine ASP.Net 3.5 SP1 ile gelen ASP.NET URL Routing RewritePath özelliğini anlatacağım. Öncelikle sayfalarımızda neden RewritePath kullanırız bunu açıklamakda fayda var.
Sayfalarınızda örneğin veritabanından bir veri alıyorsunuz ve bunu ayrı bir detay sayfasında göstermek istiyorsunuz. Bunu yapmak için detay sayfasında göstermek için yönlendireceğiniz sayfaya bir veya bir kaç paramaetre yolluyorsunuz.
Örnek : www.domain.com/UrunDetay.asp?UrunID=12&KategoriID=5 gibi ve URL adresinzide bu şekilde son kullanıcılarda görüyor. Aslında bunda kötümser olmamakta fayda var tabiki bu şekilde de olabilir. Ancak son kullanıcının anlayacağı şekilde ve en önemlisi arama motorları için daha kolay anlaşılır ve indexlenebilir bir URL adresi göstermek hem sizin ve siteniz açısından iyi olacaktır.
Yukardaki verdiğim örneğin yerine URL adresinizde www.domain.com/Kitaplar/Siyaset/Lambaya-Puf-De.aspx gibi bir URL adresi yazması çok daha iyi olacaktır. Şimdi artık nasıl yapacağımıza başlayalım.
RewritePath işlemimizde Global.asax kullanmadan IHttpModule Interface Class sınıfını kullacağız.
İlk öce URLRewrite isminde bir Class oluşturalım ve IHttpModule Interface Classını inherit (miras) edelim.
public class UrlRewrite : IHttpModule // Interface classına ait Metotları çıkarmak için Ctrl + Shift + F10 tuşlarını kullanabilirsiniz.
{
#region IHttpModule Members
public void Dispose()
{
}
public void Init(HttpApplication context)
{
}
#endregion
}
Classımızı oluşturduk sonra sayfalarımızın her Postback- Request (istek) işleminde URL adresimizi kontrol edeceğimiz BeginRequest Event tetikleyicimizi oluşturmak için Init Metodumuzun içine gerekli kodumuzu yazıyoruz.
public void Init(HttpApplication context)
{
context.BeginRequest += new EventHandler(context_BeginRequest);
}
void context_BeginRequest(object sender, EventArgs e)
{
HttpApplication app = (HttpApplication)sender;
}
Burada HttpApplication sınıfımız ile uygulama bazında işlemler yapmak için kullanacağımız sınıftır. Her sayfa istek (Request) işleminde örneğin yukarıda verdiğimiz 2. örnekte Kategori Kitaplar yazısı geçiyorsa gerekli yönlendirmemizi yapacağız.
void context_BeginRequest(object sender, EventArgs e)
{
HttpApplication app = (HttpApplication)sender;
if (app.Request.RawUrl.Contains("Kitaplar"))
{
string[] path = app.Request.RawUrl.Split('/');
string URUNID = path[3].Split('.')[0];
if (!string.IsNullOrEmpty(URUNID))
{
app.Context.RewritePath("~/UrunDetay.aspx", "", "UrunID=" + URUNID, false);
}
else
{
app.Context.Response.Redirect("~/");
}
}
}
Bu kodumuzu açıklamak gerekirse Request.RawUrl ile o anki bize gönderilen URL adresini alıyoruz ve Contains(); metodu ile URL adresinde Kitaplar yazısı geçiyormu bakıyoruz.
Eğer geçiyorsa, URL adresini (http://www.domain.com/Kitaplar/Siyaset/12/Lambaya-Puf-De.aspx) yatay ayırma karakterlerinden Split('/'); metodu ile ayrıştrıp string dizisine aktarıyoruz. Burdaki amaç dizinin içindeki bize lazım olan UrunID olan 12 rakamını almak.
Bu aşamadan sonra app.Context.RewritePath(); metodumuz ile gerekli yerlere paramaetlerimizi vererek yönlendirme işlemini gerçekliştiriyoruz. Buna görede sayfanızda belirteceğiniz URL adresiniz yani LinkButton, Button yada <a href> vb. bölümlerine sayfanızın URL adresinde nasıl görüntüleyeceğine karar vereceğiniz URL adresinizi belirtiyorsunuz.
Hepsi bu kadar. Bir sonraki makalemde görüşmek üzere hoşçakalın.