mehmetkarahanlı
Aktif Üye
@mehmetkarahanlı@
Asp.net hata sayfaları konusunu web.config yapılandırması ile anlatacağız. Bu yapılandırmaya göre her hata koduna özgü ayrı bir hata sayfası oluşturmak (404,500) mümkünken, tümü için tek bir genel hata sayfası kullanmak da mümkündür.
Asp.net hata sayfaları web uygulamanızın güvenliği ve SEO için önemli sayfalardır. Web sitenizde bir sorunla karşılaşılması durumunda veritabanı bağlantı cümleniz gibi hassas bilgileriniz kullanıcılar tarafından görülebilir. Ayrıca SEO uyumlu bir site için hata sayfalarınızın bulunması ve optimize edilmiş olması önemlidir.
Visual Studio ile yeni web projesi açarak hata durumunda görüntülenecek sayfalarımızı tasarlayarak başlayalım. Bu örnek projede error.aspx ve 404.aspx isminde 2 hata sayfası oluşturduk. Çoğu durumda, hata sayfasında programlama yeteneklerini kullanmayacaksanız bu sayfaları salt HTML formatta da (404.html gibi) oluşturabilirsiniz.
Örnek 404 hata sayfamızın içeriği aşağıdaki gibi;
<div class="container">
<h1 class="title">404</h1>
<p>Sayfa kaldırılmış yada adresi değiştirilmiş!</p>
<a href="default.aspx" title="Ana Sayfa">Ana Sayfaya Gitmek İçin Tıklayın</a>
</div>
Hata sayfası için özel bir tasarım hazırlıyorsanız kullanıcının en azından ana sayfaya dönebilmesi için bir link yerleştirmeniz yararınıza olur. Aksi durumda hata sayfası ile karşılaşan ziyaretçiniz sitenizi terk edecektir. Ayrıca site içi arama özelliği geliştirdiyseniz bunu hata sayfanıza yerleştirmek yine yararınıza olacaktır.
Web.Config Üzerinde Asp.net Hata Sayfaları Ayarları
Web.config üzerinde hata sayfaları ayarlamaları oldukça basittir. system.web düğümü içerisinde customErrors düğümü ile hata sayfalarımızı bildirebiliriz. Bu örnek için oluşturduğumuz customErrors düğümü aşağıdaki gibi;
<system.web>
<customErrors mode="On" defaultRedirect="~/error.aspx">
<error statusCode="404" redirect="~/404.aspx" />
</customErrors>
<!--Burada başka düğümler de bulunabilir...-->
</system.web>
Bu örnekte 3. satırdaki kodlama ile 404 kodlu hata için 404.aspx sayfasının, diğer tüm hatalar için varsayılan (2. satır) olarak error.aspx sayfasının görüntülenmesini belirtiyoruz.
Buradaki defaultRedirect özelliği varsayılan hata sayfası, yani buradaki örneğimizde 404 kodlu hata dışındaki tüm hatalarda görüntülenecek sayfayı bildiren özellik.
Mode özelliği ile 3 farklı durumdan birini belirleyebiliyoruz. Off durumu hata sayfalarının kullanılmadığı durumlar içindir. RemoteOnly, hata sayfalarının sadece gerçek sunucu üzerinde aktif, localhost üzerinde pasif olduğunu belirtiyor. Bu örnekte kullandığımız Ondurumu ise sayfaların yerel sunucuda da uzak sunucuda da aktif olduğunu bildirir.
Asp.net Url Rewrite (Url Değiştirme)
Asp.net Url Rewrite Neden Önemli?
Asp.net url rewrite, sitemizdeki içeriklerin adreslerinin arama motorları ve ziyaretçiler tarafından daha okunabilir olmasını sağlar. Böylece SEO dostu link yapısına sahip oluruz ve kullanıcılar da bulundukları sayfaların adresi ile içeriği hakkında daha fazla bilgi sahibi olurlar. Ayrıca url yapısı en bilinen SEO değerlendirme kriterlerinden biridir. İster küçük ister büyük boyutlu olsun her sitenin url routing ihtiyacı vardır.
Asp.net Url Değiştirme İşlemleri
Asp.net url değiştirme işlemlerini toplamda 3 adımda gerçekleştireceğiz. Bu adımlar kısaca aşağıdaki gibi;
- Global.asax dosyamızı düzenleyeceğiz.
- Veritabanımızı ve veri ekleme sayfamızı url routing senaryomuza uygun olarak tasarlayacağız.
- Site içi linklerimizi ve detay sayfamızı oluşturacağız.
Global.asax dosyamızı düzenleyerek başlayalım. Bu kısım asp.net url rewrite işlemlerinin temelini oluşturuyor. RegisterUrlRoutes metodu ile url yapısını düzenleyeceğimiz dinamik sayfalarımızı tanımlıyoruz. Bu tanımlamamızı Application_Start metodunun içerisinde çağırıyoruz. Örnek kodlama aşağıdaki gibi olmalı.
void Application_Start(object sender, EventArgs e){
RegisterUrlRoutes(System.Web.Routing.RouteTable.Ro utes);
}
public void RegisterUrlRoutes(System.Web.Routing.RouteCollecti on UrlRoutes)
{
UrlRoutes.MapPageRoute("blog", "{adres}", "~/detay.aspx");
}
Veritabanında tuttuğumuz kayıtlar arasında sayfa başlığını örnek alan ancak Türkçe ve özel karakterlerden arındırılmış url adresimizi tutacak bir kolona ihtiyacımız olacak. Bunun için aşağıdaki gibi bir tablo tasarımı hazırlamalısınız.
Yazı Başlığı<br />
<asp:TextBox ID="TextBox1" runat="server" OnTextChanged="TextBox1_TextChanged" AutoPostBack="true"></asp:TextBox><br />
Yazı URL<br />
<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox><br />
İçerik<br />
<asp:TextBox ID="TextBox3" runat="server" TextMode="MultiLine"></asp:TextBox><br />
<asp:Button ID="Button1" runat="server" Text="Ekle" OnClick="Button1_Click" />
setUrl metodu ile başlık içerisinde bulunan Türkçe ve (!,*,+,& gibi) özel karakterleri temizlemek için yazdığımız bir metot. Bu metodu örnek projenin içerisinde bulabilirsiniz.
Artık site içi linklerimizi ve detay sayfamızı oluşturalım. Veritabanında kayıtlı olan yazıları listelemek için aşağıdaki kodlamayı kullanıyoruz. Yazıyı görüntüleyeceğimiz sayfaya veritabanında “Adres” sütununda kayıtlı bilgi ile link veriyoruz. Yazının başlığına tıklandığında yazıyı görüntülemesini istiyoruz kısacası.
<asp:Repeater ID="Repeater1" runat="server">
<ItemTemplate>
<a href="<%# Eval("Adres") %>"><h2><%# Eval("Baslik") %></a></h2>
</ItemTemplate>
</asp:Repeater>
Son işlemimizde detay sayfamızın Page_Load olayında, hangi yazının görüntülenmek istediğini bulup sayfa içeriğini yüklüyoruz.
if (RouteData.Values["adres"] != null)
{
string adres = RouteData.Values["adres"].ToString();
SqlConnection baglantiCumlemiz = new SqlConnection(System.Web.Configuration.WebConfigur ationManager.ConnectionStrings["baglantiCumlesi"].ConnectionString);
SqlDataAdapter listeleKomutu = new SqlDataAdapter("SELECT * FROM BlogIcerigi WHERE Adres='" + adres + "'", baglantiCumlemiz);
baglantiCumlemiz.Open();
DataTable dt = new DataTable();
listeleKomutu.Fill(dt);
lblBaslik.Text = dt.Rows[0][1].ToString();//Veritabanındaki içerik tablomuzdan yazının başlığını satır ve sütün index numaraları ile çektik.
lblIcerik.Text = dt.Rows[0][2].ToString();//Veritabanındaki içerik tablomuzdan yazının içeriğini satır ve sütün index numaraları ile çektik.
listeleKomutu.Dispose();
baglantiCumlemiz.Close();
listeleKomutu.Dispose();
baglantiCumlemiz.Dispose();
}