" Umut, hiç görmeyen birine gökkuşağını anlatmak kadar zor ve imkansız... "

Categories

-

VbNet ile Asp.net UrlRouting Kullanimi

URL Routing anlamli ve SEO uyumlu url olusturmanizi saglayan bir yöntemdir. Url Routing sayesinde hem kullanicilar hem de arama motorlari için en iyi optimizasyona sahip url olusturmus olacaksiniz. Hem SEO dostu hem de anlamli url olusturmak için kesinlikle kullanmaniz gereken bir yoldur.

Makelemize baslarken ilk olarak default.aspx, detay.aspx, icerikekle.aspx ve global.asax dosyamizi olusturarak url routing anlatamina baslayacagim. Veritabanimiza bakacak olursak eger ;

seklinde tablomuzu olusturuyoruz.

ilk olarak global.asax dosyamizi inceleyecek olursak eger ;

<%@ Application Language="VB" %>
<%@ Import Namespace="System.Web.Routing" %>
<script runat="server">

    Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
        ' Code that runs on application startup
        RegisterUrlRoutes(RouteTable.Routes)
        'RegisterRoutes(RouteTable.Routes)
    End Sub

    Public Sub RegisterUrlRoutes(UrlRoutes As RouteCollection)
        UrlRoutes.MapPageRoute("detay", "{id}/{baslik}", "~/detay.aspx")

        'eger sitenizde blog, haber, fotograflar, duyurular gibi çesitli dinamik sayfa yapilari kullaniyorsaniz, ayri ayri MapPageRoute tanimlamasi yapmalisiniz 
        'Örnek:
        'UrlRoutes.MapPageRoute("haberler", "{adres}", "~/HaberDetay.aspx");
        'UrlRoutes.MapPageRoute("duyurular", "{adres}", "~/DuyuruDetay.aspx");
    End Sub

    'Private Sub RegisterRoutes(routes As RouteCollection)
    '    'Burasi bu tanimlamanin bir adi olarak geçmektedir - Route Name                                
    '    ' Burasi url yapisini temsil etmektedir. Süslü parentezler içerisindekiler dinamik olarak gönderilecegi belirtiliyor - Route Url             
    '    routes.MapPageRoute("Haber", "Haber/{id}/{baslik}", "~/Haber.aspx")
    '    'Burasi hangi sayfaya gidecegini belirtmektedir - PhysicalFile                  
    '    routes.MapPageRoute("Kullanici", "Kullanici/{kullaniciadi}", "~/Kullanici.aspx")
    'End Sub

    Sub Application_End(ByVal sender As Object, ByVal e As EventArgs)
        ' Code that runs on application shutdown
    End Sub

    Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
        ' Code that runs when an unhandled error occurs
    End Sub

    Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs)
        ' Code that runs when a new session is started
    End Sub

    Sub Session_End(ByVal sender As Object, ByVal e As EventArgs)
        ' Code that runs when a session ends. 
        ' Note: The Session_End event is raised only when the sessionstate mode
        ' is set to InProc in the Web.config file. If session mode is set to StateServer 
        ' or SQLServer, the event is not raised.
    End Sub

</script>

Namespace;lerinizi eklemeyi unutmuyoruz. Yoksa RouteCollection tipindeki sinifimiza ulasim gerçeklestiremeyiz.

Burada ilk olarak Application_Start ile routing metodumuzu baslatiyoruz. RouteCollection tipinde nesnemizi parametre ile aliyoruz ve bu nesneye nasil bir url yapisi ekleyeceksek ona göre tanimlamayi gerçeklestiriyoruz.

UrlRoutes.MapPageRoute("detay", "{id}/{baslik}", "~/detay.aspx") kodumuzu açiklayacak olursak eger ;

  1. Paremetre her tanimlama için verdiginiz isimdir. Ve her tanimlama için birbirinden farkli olmasi gerekiyor. Birbirinden farkli oldugu sürece siz istediginiz sekilde isimlendirme verebilirsiniz. Url de kullanilmiyor. Su anda bu kisimla ilgili baska isimiz olmayacak.  Ama bu isim kullanilarak da link verilebildigi bilelim. 
  2. Parametre de dikkat ederseniz baslangiçtaki id ve baslik süslü parantez içerisinde. Burada id ve baslik bölümlerinin süslü parantez içerisinde olmasi bizim bu alanlarin dinamik oldugunu ve onlara erismek istedigimizi belirtiyor.
  3. Parametre ise bu url tanimlasi girildiginde hangi sayfaya gitmesi gerektigini gösteriyor. Örnegin: http://localhost:/asp.net-url-routher-deneme1 böyle bir url girdiginizde bu parametre detay.aspx sayfasina gidecegini belirtmektedir.

Simdi ise defaut.aspx sayfamizi olusturalim ve UrlRoutes.MapPageRoute("detay", "{id}/{baslik}", "~/detay.aspx") kodumuza degerlerini gönderelim. Burada veritabanina baglanti islemi gerçeklestiriyoruz. Ardinda id ve baslik degerlerini eval metodu ile çekiyoruz.

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="default.aspx.vb" Inherits="_default" %>
 
<!DOCTYPE html>
 
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <asp:Repeater ID="Repeater1" runat="server">
                <ItemTemplate>
                     <a href='<%#String.Format("{0}/{1}", Eval("id"), text.ToUrl(Eval("baslik").ToString()))%>'><%# Eval("baslik") %><br /></a>
                </ItemTemplate>
    </asp:Repeater>
    </div>
    </form>
</body>
</html>

Ardindan default.aspx.vb kodlarimizi yazalim ve veritabanina baglanma islemini gerçeklestirelim.

Imports System.Data
Imports System.Data.OleDb
Partial Class _default
    Inherits System.Web.UI.Page

    Dim baglanti As New OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0; Data Source=" + Server.MapPath("veritabani/veritabani.mdb"))
    Dim sorgu As New OleDbCommand
    Dim adap As New OleDbDataAdapter
    Dim oku As OleDbDataReader
    Dim sayfa As PagedDataSource

    Private Sub _default_Load(sender As Object, e As EventArgs) Handles Me.Load
        If Not IsPostBack Then
            baglanti.Open()
            sorgu = New OleDbCommand("SELECT * FROM icerik", baglanti)
            oku = sorgu.ExecuteReader()
            Repeater1.DataSource = oku
            Repeater1.DataBind()
            sorgu.Dispose()
            baglanti.Close()
        End If
    End Sub
End Class

text.ToUrl(Eval("baslik").ToString()

text.To.Url kismina dikkat edilecek olursa eger, burada yapilan baslik içerigini veritabanindan cekerken kontrol islemi gerçeklestiriyoruz. Yani türkçe karakterlerin daha dogru ve saglikli çikmasi için To.Url fonksiyonuna burada gönderme islemini gerçeklestiriyoruz. text clasimiza bakacak olursak eger ;

Imports Microsoft.VisualBasic

Public Class text
    Public Shared Function ToUrl(text As String) As String
        If text = "" OrElse text Is Nothing Then
            Return ""
        End If
        text = text.Replace("s", "s")
        text = text.Replace("S", "S")
        text = text.Replace(".", "")
        text = text.Replace(":", "")
        text = text.Replace(";", "")
        text = text.Replace(",", "")
        text = text.Replace(" ", "-")
        text = text.Replace("!", "")
        text = text.Replace("(", "")
        text = text.Replace(")", "")
        text = text.Replace("'", "")
        text = text.Replace("g", "g")
        text = text.Replace("G", "G")
        text = text.Replace("i", "i")
        text = text.Replace("I", "i")
        text = text.Replace("ç", "c")
        text = text.Replace("ç", "C")
        text = text.Replace("ö", "o")
        text = text.Replace("Ö", "O")
        text = text.Replace("ü", "u")
        text = text.Replace("Ü", "U")
        text = text.Replace("`", "")
        text = text.Replace("=", "")
        text = text.Replace("&", "")
        text = text.Replace("%", "")
        text = text.Replace("#", "")
        text = text.Replace("<", "")
        text = text.Replace(">", "")
        text = text.Replace("*", "")
        text = text.Replace("?", "")
        text = text.Replace("+", "-")
        text = text.Replace("""", "-")
        text = text.Replace("»", "-")
        text = text.Replace("|", "-")
        text = text.Replace("^", "")
        Return text
    End Function
End Class

Dönüsüm islemini gerçeklestiriyoruz.

Buraya kadarki islemlerden sonra ise detay.aspx sayfamizin kodlarina bakalim.

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="detay.aspx.vb" Inherits="detay" %>
 
<!DOCTYPE html>
 
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
            <asp:Label ID="lblBaslik" runat="server" Text=""></asp:Label>
            <br />
            <asp:Label ID="lblIcerik" runat="server" Text=""></asp:Label>
            <br />
            <asp:Label ID="lblid" runat="server" Text=""></asp:Label>
    </div>
    </form>
</body>
</html>

Yukarida kodlarla ise görüldügü üzere labeller ekleyerek, baslik, içerik ve id degerlerimizi cekiyoruz. 

detay.aspx.vb kodlarimiza bakacak olursak eger ;

Imports System
Imports System.Data
Imports System.Data.OleDb
Partial Class detay
    Inherits System.Web.UI.Page

    Dim baglanti As New OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0; Data Source=" + Server.MapPath("~/veritabani/veritabani.mdb"))
    Dim sorgu As New OleDbCommand
    Dim adap As New OleDbDataAdapter
    Dim oku As OleDbDataReader

    Private Sub detay_Load(sender As Object, e As EventArgs) Handles Me.Load

        Dim id As String = RouteData.Values("id").ToString()
        baglanti.Open()
        sorgu = New OleDbCommand("select * from icerik WHERE id=@id", baglanti)
        sorgu.Parameters.AddWithValue("@id", id)
        oku = sorgu.ExecuteReader()
        If oku.Read() = True Then
            lblBaslik.Text = oku("baslik").ToString()
            lblIcerik.Text = oku("icerik").ToString()
            lblid.Text = oku("id").ToString()
        End If
        sorgu.Dispose()
        baglanti.Close()

    End Sub
End Class

Burada önemli olan kod blogu Dim id As String = RouteData.Values("id").ToString() kodumuzdur. Burada UrlRouting degerlerimizi çekiyoruz. Biz default.aspx dosyamizda eval metodu ile verileri cekmistik degilmi ! Global.asax dosyamizda ise dinamik olarak degerlerinizi belirlemistik. Simdi bu ikisine bakacak olursak eger ;

<a href='<%#String.Format("{0}/{1}", Eval("id"), text.ToUrl(Eval("baslik").ToString()))%>'><%# Eval("baslik") %><br /></a>
Dim id As String = RouteData.Values("id").ToString()

isin önemli olan kismi ise burada zaten. Biz burada UrlRoutes.MapPageRoute("detay", "{id}/{baslik} kodumuza diyoruz ki sen id ve baslik degerlerini <%#String.Format("{0}/{1}", Eval("id"), text.ToUrl(Eval("baslik").ToString()))%> kismindan alacaksin. Bu degerler senin degerlerin ve linke tikladigimizda ise ~/detay.aspx;se gideceksin. Peki detay.aspx dosyamiza gittikten sonra ne yapacagiz ?

Dim id As String = RouteData.Values("id").ToString() kodumuz ile UrlRouting;e göndermis oldugumuz id degerini cekiyoruz ve id string degiskenimize atiyoruz. Degere ulastiktan sonra ise istedigimiz islemleri gerçeklestiriyoruz.

Default.aspx dosyamizdaki linklere bakacak olursak ;

seklinde karsimiza çikmaktadir. Tiklandiginda ise detay.aspx sayfamiza gitmekte ve verilerimizi çekmekteyiz. icerikekle.aspx sayfamiz hakkinda bilgi paylasmiyorum. Orada sadece veritabanina baslik ve içerik degerini kayit ettirmistim. Örnek dosyayi indirip kodlari inceleyebilirsiniz. UrlRouting konusu karisik bir konu biraz. ilk etapta biraz karisik gibi görünsede örnekler üzerinde inceleme yaparak, daha anlasilir bir ahl almaktadir.

Örnek çalismayi buradan indirebilirsiniz.

  • 0
  • 6672
  • 0

- BUNLARIDA GÖZDEN GEÇİREBİLİRSİNİZ -

HENÜZ YORUM YAPILMAMIŞ !

Yorum yazın

HAKKIMDA

KONULARI TAKİP EDİN

SOSYAL AĞLAR

  • Mesajınızı Gonderin