09 December 2016

Asp.Net Url Reuting İşlemi

Bildiğimiz gibi Url’lerin anlamlı kelimeler ve hatta anahtar kelimeler içermesi SEO açısından oldukça önemlidir.

Yani kategori.aspx?id=1&ad=bilgisayar şeklinde bir url kullanmaktansa kategori/1/bilgisayar.html şeklinde bir yapı kullanırsak arama motoru optimizasyonu açısından avantajlı oluruz. Eski yöntem olan URL Rewriting yerine artık bu işlemi .Net 4.0 da URL Reuting ile kolay bir şekilde yapabiliyoruz.

Öncelikle projeye bir adet Global.asax dosyası ekleyelim. Veya mevcutsa Global.asax dosyasında Url Yapısını tanımlayalım.

protected void Application_Start(object sender, EventArgs e)
 {
 RouteTable.Routes.Add("Makaleler", new Route("Makale/{MakaleId}/{MakaleBaslik}", new PageRouteHandler("~/Makalem.aspx")));
 }

Sayfamıza bir adet Repeater ve Hyperlink ekleyelim.

<asp:Repeater ID="rptMakaleler" runat="server"
 onitemdatabound="rptMakaleler_ItemDataBound">
 <ItemTemplate>
 <asp:HyperLink ID="hlMakaleler" runat="server">HyperLink</asp:HyperLink><br />
 </ItemTemplate>
 </asp:Repeater>

Code behind kısmında kodlarımızı yazacağız. Öncesinde başlıkla birlikte gelen Türkçe karakterleri temizlememiz gerekecek. Bunun için bir metod yazalım:

public static string AdresDuzenle(string metin)
 {
 string duzen = metin.ToLower();
 duzen = duzen.Trim();
duzen = duzen.Replace("â", "a");
 duzen = duzen.Replace("ê", "e");
 duzen = duzen.Replace("î", "i");
 duzen = duzen.Replace("ô", "o");
 duzen = duzen.Replace("û", "u");
 duzen = duzen.Replace("ş", "s");
 duzen = duzen.Replace("ı", "i");
 duzen = duzen.Replace("İ", "ı");
 duzen = duzen.Replace("ü", "u");
 duzen = duzen.Replace("ç", "c");
 duzen = duzen.Replace("ö", "o");
 duzen = duzen.Replace("ğ", "g");
 duzen = duzen.Replace(" ", "-");
 duzen = duzen.Replace("'", "");
 duzen = duzen.Replace(".", "");
 duzen = duzen.Replace(":", "");
 duzen = duzen.Replace("\"", "");
 duzen = duzen.Replace("’", "");
 duzen = duzen.Replace("“", "");
 duzen = duzen.Replace("”", "");
 duzen = duzen.Replace(",", "");
 duzen = duzen.Replace("/", "-");
 duzen = duzen.Replace("!", "");
 duzen = duzen.Replace(";", "");
 duzen = duzen.Replace("(", "-");
 duzen = duzen.Replace(")", "");
 duzen = duzen.Replace("<", "");
 duzen = duzen.Replace(">", "");
 duzen = duzen.Replace("[", "");
 duzen = duzen.Replace("]", "");
 duzen = duzen.Replace("?", "");
 duzen = duzen.Replace("_", "");
 duzen = duzen.Replace("‘", "");
 duzen = duzen.Replace("---", "-");
 duzen = duzen.Replace("--", "-");
 duzen = duzen.Replace("%", "-");
 duzen = duzen.Replace("&", "-");
 duzen = duzen.Replace("=", "");
duzen = duzen.LastIndexOf("-") == duzen.Length - 1
 ? duzen.Replace("-", "") : duzen;
 return duzen;
 }

Sayfadaki Repater’ın ItemDataBound eventine kodları yazalım:

protected void Page_Load(object sender, EventArgs e)
 {
 SqlConnection sqlcon=new SqlConnection("server=.;database=Weblog;trusted_connection=true");
 SqlCommand sqlcmd = new SqlCommand("select * from makale", sqlcon);
 sqlcon.Open();
 rptMakaleler.DataSource=sqlcmd.ExecuteReader();
 rptMakaleler.DataBind();
 sqlcon.Close();
}
protected void rptMakaleler_ItemDataBound(object sender, RepeaterItemEventArgs e)
 {
 if (e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem)
 {
 HyperLink hl= e.Item.FindControl("hlMakaleler") as HyperLink;
 hl.Text = DataBinder.Eval(e.Item.DataItem, "MakaleBaslik").ToString();
RouteValueDictionary parametreler = new RouteValueDictionary();
 parametreler.Add("MakaleId", DataBinder.Eval(e.Item.DataItem,"MakaleId").ToString());
 parametreler.Add("MakaleBaslik", AdresDuzenle(DataBinder.Eval(e.Item.DataItem,"MakaleBaslik").ToString()));
VirtualPathData adresler = RouteTable.Routes.GetVirtualPath(null, "Makaleler", parametreler);
 hl.NavigateUrl = adresler.VirtualPath;

 }
 }

Makale sayfasının kodları da aşağıdaki şekilde olacak:

<asp:Repeater ID="rptMakale" runat="server">
 <ItemTemplate>
 <h2><%#Eval("MakaleBaslik") %></h2>
 <p><%#Eval("MakaleIcerik") %></p>
 </ItemTemplate>
 </asp:Repeater>
protected void Page_Load(object sender, EventArgs e)
 {
 int id = Convert.ToInt32(RouteData.Values["MakaleId"]);
 SqlConnection sqlcon = new SqlConnection("server=.;database=Weblog;trusted_connection=true");
 SqlCommand sqlcmd = new SqlCommand("select * from makale where MakaleId=@mid", sqlcon);
 sqlcmd.Parameters.AddWithValue("@mid", id);
 sqlcon.Open();
 rptMakale.DataSource = sqlcmd.ExecuteReader();
 rptMakale.DataBind();
 sqlcon.Close();

 }

Reuting işlemi bu kadar.
Buradan URL Pattern’lerine göz atabilirsiniz. http://msdn.microsoft.com/en-us/library/cc668201.aspx#url_patterns