Bunun için routing (yönlendirme) kullanılıyor.
Routing
yönteminde, yapılan isteklerdeki web site adresinden sonra gelen kısmın
(path) yapısına bakarak uygun sayfalara yönlendirme yapılıyor.
Örneğin yapılan istek:
http://cevapsitesi.com/urunler/kategori/1
ise, bu adresteki
/urunler/kategori/1
kısmına bakılıyor.
Bu
yönlendirmeler Global.asax dosyası içindeki ApplicationStart olayının
içinde tanımlanacak. Global.asax dosyası yoksa Visual Studio'dan
oluşturabilirsin. Dosya oluştuğunda zaten Application_Start olayını
karşılayan yordamı göreceksin. Tanımlamalar bunun içinde yapılacak.
Yönlendirmeler için
System.Web.Routing isim alanı kullanılıyor. Bunu Global.asax dosyanın üstündeki
import bölümünde şöyle bildirmelisin.
<%@ import namespace="System.Web.Routing" %>
Arkasından Application_Start olayı içinde yönlendirmelerini
RouteTable.Routes statik kolleksiyonununa eklemelisin.
RouteCollection sınıfından olan
Routes özelliğinin
MapPageRoute yöntemiyle yönlendirme ekleniyor.
Bunun bir kaç kullanımı var. En temel olanı şöyle:
MapPageRoute(Yönlendirme Adı,
Yönlendirme Yolu ve parametreler,
URL'nin yönlendirileceği gerçek sayfa)
Örneğin:
void Application_Start(object sender, EventArgs e)
{
RouteCollection routes =
RouteTable.Routes;
routes.MapPageRoute("Ürün Görüntüleme", "Urunler/{KategoriAdi}/{*UrunKimligi}", "~/UrunGoruntule.aspx");
routes.MapPageRoute("Sayfalar", "Sayfalar/{SayfaAdi}", "~/Sayfalar.aspx");
}
Bu örnekte iki tane yönlendirme yapılıyor.
Süslü parantez içinde verilenler parametreler. UrunKimligi parametresinin yanındaki yıldız bu parametrenin kullanılmayabileceğini bildiriyor.
Son parametre ise yönlendirmenin yapılacağı asıl sayfa.
Belirtilen bir yönlendirme ile eşleşen bir istek yapıldığında ilgili sayfa yükleniyor.
Örneğin birinci yönlendirme ile şunlar eşleşebilir.
http://example.com/Urunler/Elbise/4
http://example.com/Urunler/123/BirMetin
http://example.com/Urunler/Pantolon
http://example.com/Urunler/123
Görüldüğü gibi parametrelerin veri tipi yok, deseni, (Urunler/ metninden sonra bir metin eğer varsa sonra bir / ve bir metin) uysun yeter. Bu bilgiler yönlendirilen sayfaya aynı QueryString (adres çubuğundaki sorgu dizesi) gibi string veriler olarak gidecek ve tipleriyle QueryString'de olduğu gibi ilgili sayfada uğraşacaksın.
Yönlendirilen sayfa içinden Page_Load yordamında (veya başka yerde de olabilir);
Bir parametrenin gelip gelmediğini test etmek için (örneğin UrunKimligi):
if (Page.RouteData.Values.ContainsKey("UrunKimligi"))
{
...
}
Bir parametrenin değerini almak için:
(Örneğin http://example.com/Urunler/Elbise/4 şeklinde gelen bir istekteki ürün kimliği parametresine karşılık gelen 4 değerini)
string stringUrunKimligi = Page.RouteData.Values["UrunKimligi");
Belirli bir yönlendirme ile bu sayfaya gelinip gelinmediğini öğrenmek için (örneğin "Ürün Görüntüleme"):
if (Page.RouteData.Route == RouteTable.Routes["Ürün Görüntüleme"])
{
...
}
ifadelerini kullanabilirsin.
Bir parametre için değer gelmemişse (üstteki http://example.com/Urunler/Pantolon adresindeki gibi), bu değer için boş bir string alırsın. Bunu da;
if (stringUrunKimligi == String.Empty)
{
...
}
şeklinde test edebilirsin.