Bilindiği üzere web uygulamalarının ana amaçlarından biri arama motorlarında üst sıraları zorlamaktır. Bunun için webmasterlar sitelerine SEO çalışmaları yaparlar. (SEO = Search Engine Optimization). Örneğin bir makale yazdığımızı düşünelim, yazdığımız makaleyi gösterdiğimiz sayfa MakaleGoster.aspx olsun. Biz bir makaleye tıkladığımda, tarayıcı bizi
www.sizinsiteniz.com/MakaleGoster.aspx?id=1 şeklinde yönlendirecektir. Halbuki bizim tıkladığımız makalenin adı ASP.NET olsun. Şunu unutmamız lazım, aspx den sonraki uzantıları ne yazık ki arama motorları incelememektedir. İşte bu sebepten dolayı yazdığınız makaleler ne yazık ki arama motorlarında çıkmayacaktır. Sizce urlimiz böyle olsa nasıl olurdu.
www.sizinsiteniz.com/MakaleGoster/ASP.NET, emin göze nasıl gelir bilmem ama arama motorlarına çok cazip gözükeceğinden hiçbir şüphem yok.
O zaman bunu nasıl yaptığımıza hep beraber bakalım.
Bir adet C# da açılmış bir empty asp.net projesi oluşturalım.
Projemize bir adet default.aspx dosyası ve içeriği göstereceğimiz Page.aspx dosyası ekleyelim. Sonra Sql Servermızı açalım bir database oluşturalım, ben adına urlRewriting verdim. Sonra bu database bir tablo ekleyelim. Database in adı
Content olsun. Content e de 3 tane alan ekleyelim
Kod:
CREATE TABLE [dbo].[Content](
[id] [int] IDENTITY(1,1) NOT NULL,
[name] [varchar](100) NULL,
[content] [varchar](500) NULL,
CONSTRAINT [PK_Content] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON[PRIMARY]
) ON [PRIMARY]
Bu oluşturduğumuz tablomuza da birkaç kayıt ekleyelim. Uygulamamıza bir global.asax dosyası ekleyelim. Global.asax ın içine ,
Kod:
void Application_Start(object sender, EventArgs e)
{
System.Web.Routing.RouteTable.Routes.MapPageRoute("icerik","icerik/{id}", "~/Page.aspx");
}
RoutName : İstediğiniz ismi verebilirsiniz, Verdiğiniz rootun adı,
RouteUrl: Gözükmesini istediğiniz adres, biz burada içerik dedik. İd ise bizim query stringimizdir.
Physical File: Rout işlemini yapacağımız sayfamızdır.
Şimdi ControlUrl diye bir class yazacağız. Bu yazacağımız class ın amacı tamamen karater kontrolüdür. Çünkü url de Türkçe karakter sorun çıkarabilir.
Kod:
public static string ModifyUrl(string Text)
{
try
{
string strReturn = Text.Trim();
strReturn = strReturn.Replace("ğ", "g");
strReturn = strReturn.Replace("Ğ", "G");
strReturn = strReturn.Replace("ü", "u");
strReturn = strReturn.Replace("Ü", "U");
strReturn = strReturn.Replace("ş", "s");
strReturn = strReturn.Replace("Ş", "S");
strReturn = strReturn.Replace("ı", "i");
strReturn = strReturn.Replace("İ", "I");
strReturn = strReturn.Replace("ö", "o");
strReturn = strReturn.Replace("Ö", "O");
strReturn = strReturn.Replace("ç", "c");
strReturn = strReturn.Replace("Ç", "C");
strReturn = strReturn.Replace("-", "+");
strReturn = strReturn.Replace(" ", "+");
strReturn = strReturn.Trim();
strReturn = new System.Text.RegularExpressions.Regex("[^a-zA-Z0-9+]").Replace(strReturn, "");
strReturn = strReturn.Trim();
strReturn = strReturn.Replace("+", "-");
return strReturn;
}
catch (Exception ex)
{
throw ex;
}
}
Bu kodu ekledikten sonra default.aspx sayfamızı açalım ve içine veri tabanından okuma işlemlerini ve Routlama yapacağımız kodu yazacağız.
Kod:
protected void Page_Load(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection();
con.ConnectionString = "Server=.;Database=urlRewriting;Trusted_Connection=True;";
try
{
con.Open();
ResultLabel.Text = "baglandık";
string sql = "select * from Content where id = 2";
SqlCommand cmd = new SqlCommand(sql, con);
string i = "";
SqlDataReader dr = cmd.ExecuteReader();
if (dr.Read())
{
i = ControlUrl.ModifyUrl(dr.GetString(1));
UrlLinkLabel.Text=dr.GetString(1);
UrlLinkLabel.PostBackUrl = Page.GetRouteUrl("icerik", new { id = i });
}
con.Close();
}
catch (Exception exc)
{
ResultLabel.Text = "Bağlanamadık";
}
}
Bu sayfada bir adet linklabel ve label kullandık. LinkLabel sayesinde Page.aspx sayfasına yönlendirme yaptık. Label sayesinde de veri tabanına bağlantı durumumuzu kontrol etmiş olduk.
Son aşamaya geldik, Request yolladığımız sayfa olan Page.aspx sayfasının bu requeste bir karşılık vermesi gerekmetedir. Page.cs dosyasını açalım ve
Kod:
protected void Page_Load(object sender, EventArgs e)
{
string id = RouteData.Values["id"].ToString();
}
Şuan itibari ile kodumuz hazırdır. Url routing yapmadan önce uygulamayı çalıştırdığımızda adres satırında
http://localhost:45198/UrlReWriting/Page.aspx?id=2
karşımıza çıkacaktır. Routing işlemini yaptıktan sonra ise
http://localhost:45198/UrlReWriting/Makale/ASP.NET
Karşınıza çıkacaktır