ASP.NET 4.0 ile Temizlenmiş web.config Dosyası

ASP.NET 3.0 ve ASP.NET 3.5 ile web.config Dosyası

ASP.NET yıllar içerisinde gelişti, buna bağlı olarak web.config dosyasında tutulan ayarlarda da gözle görülür bir artış oldu. .Net Framework 3.5 SP1 kurulu olan bilgisayarımda yeni oluşturduğum bir Web Uygulamasının web.config dosyası aşağıdaki gibi oluyor.

< ?xml version=”1.0”?>

<system .web> </system> <system .codedom> </system> <system .webServer> </system>

</pre>

Web uygulamasına özgü ayarlar yapılmaya başlandığında (ConnectionStrings, Authentication, AppSettings, vs) web.config dosyası da büyümeye ve karmaşıklaşmaya devam ediyor. Fakat web uygulamalarının büyük oranında bu ayarların birçoğu değiştirilmeden bırakılır.

ASP.NET 4.0 ile web.config dosyamız, ilk versiyonlarda olduğu gibi sadeleşiyor.

Visual Studio 2010‘da Empty ASP.NET Web Application şablonu ile yeni bir web projesi oluşturursanız, web.config dosyası aşağıdaki gibi oluşturuluyor;

< ?xml version="1.0"?>

        <system .web>
                
        </system>
        <system .webServer>
            
        </system>



İlk konfigürasyon satırı ASP.NET uygulamasının **debug** edilebileceğini ve Framework versiyonunun **4.0** olduğunu bildiriyor.

İkinci konfigürasyon satırı ise, web uygulamasının **IIS7** üzerinde host edildiği durumlarda **URL Rewrite** yapabilmek için gerekli.

ASP.NET 4.0 SEO Geliştirmeleri

Search Engine Optimization (Arama Motoru Optimizasyonu), internette yayınlanan her site için çok önemlidir. Günümüzde sitelerin trafiklerinin büyük oranı arama motorlarından gelmektedir. Web sitelerinin arama sonuçlarında daha iyi yer edinmeleri alacakları trafik açısından gittikçe daha önemli hale gelmektedir.

Web sitenizin SEO-Uyumluluğunu Google Analytics ile kolaylıkla ölçebilirsiniz.

ASP.NET 4.0 SEO Geliştirmeleri

ASP.NET 4.0 SEO uyumluluğu ile ilgili olarak bir dizi yenilik-geliştirme ile birlikte geliyor. Bunlardan bazıları;

  • Yeni Page.MetaKeywords ve Page.MetaDescription özellikleri
  • ASP.NET Web Forms’ta yeni gelen URL Yönlendirme (URL Routing) desteği
  • Yeni Response.RedirectPermanent() methodu Bu özellikleri inceleyelim;

Page.MetaKeywords and Page.MetaDescription Özellikleri

Arama motorlarının crawler dediği programcıklar, sitenizi indekslerken, <head> tagı içerisinde yeralan <meta name=”keywords”> ve <meta name=”description”> taglarını kullanarak sitenizi kategorize eder.

<head runat=”server”> <title>Örnek Sayfa</title> <meta name=”keywords” content=”aspnet, engin polat, geliştirme, framework” /> <meta name=”description” content=”ASP.NET 4.0 ile yeni gelen özellikler” /> </head></pre> ASP.NET 4.0’dan önce, bu taglara programatik olarak erişmek mümkün değildi. ASP.NET 4.0 ile birlikte aşağıdaki kodları yazabiliyoruz;

public void Page_Load(object sender, EventArgs e)
{
    Page.Title = "Örnek Sayfa";

    Page.MetaKeywords = "aspnet, engin polat, geliştirme, framework";
    Page.MetaDescription = "ASP.NET 4.0 ile yeni gelen özellikler";
}
<%@ Page Title="Örnek Sayfa"
    Keywords = "aspnet, engin polat, geliştirme, framework"
    Description = "ASP.NET 4.0 ile yeni gelen özellikler"
    CodeBehind = "OrnekSayfa.aspx.cs"
    Inherits = "OrnekWebSitesi.OrnekSayfa" %>

Yukarıdaki kodlar sayesinde *Page* sınıfının *Keyword* ve *Description* özelliklerine programatik olarak erişmek mümkündür.

***ASP.NET Web Formlarında URL Yönlendirme (URL Routing)***

**URL Yönlendirme** özelliği ilk olarak ASP.NET 3.5 SP1 ile gelmişti ve ASP.NET MVC ile zaten kullanabiliyorduk. URL Yönlendirme özelliği sayesinde, web uygulamasına gelecek tüm isteklerin fiziksel dosyalara gelmesi zorunluluğu ortadan kalkıyor. Artık aşağıdakiler gibi **Arama Motoru Uyumlu (SEO - Friendly)** URL'ler tanımlayabiliyoruz;

*http://www.orneksite.com/sayfa.aspx?id=5*
yerine
*http://www.orneksite.com/sayfa/hakkinda*

veya

*http://www.orneksite.com/urunler.aspx?kategori=yazilim*
yerine
*http://www.orneksite.com/urunler/yazilim*

ASP.NET 4.0 URL Yönlendirme (URL Routing) ile ilgili detaylı bir yazıyı yakında yayınlayacağım.

***Response.RedirectPermanent() methodu***

Web uygulamalarımızda, belli durumlarda akışı başka bir sayfaya yönlendirmek sıklıkla yaptığımız birşeydir. ASP.NET ile genellikle *Response.Redirect()* method'unu kullanırız. Aslında *Response.Redirect()* method'unun yaptığı şey, browser'a **HTTP 302 (Temporary Redirect - Geçici Yönlendirme)** sonucu döndürmektir. Böylece browser yönlendirmek istenen sayfadan akışa devam eder.

Arama motorlarının sayfaları indexlemeye yarayan crawler uygulamaları, bir sayfadan diğerine geçici olarak yönlendirme olduğunu gördüğünde (HTTP 302 mesajı) **akışa yeni sayfadan devam etmez**. Bu da sitenizde bulunmasına rağmen indexlenmeyen sayfalar oluşmasına yol açar.

ASP.NET 4.0 ile birlikte *Response.RedirectPermanent()* method'u geliyor. Bu method çağırıldığında, browser'a HTTP 302 mesajı yerine **HTTP 301 (Moved Permanently - Kalıcı Olarak Taşındı)** mesajı döndürür. Crawler'lar, HTTP 301 mesajı gördüklerinde akışa yeni sayfadan devam ettikleri için, **web sitesinin tamamı indexlenecektir**.

*Response.Redirect("YeniSayfa.aspx"); // HTTP 302 mesajı ile YeniSayfa.aspx'ten akış devam eder. Crawler indexlemez.*

*Response.RedirectPermanent("YeniSayfa.aspx"); // HTTP 301 mesajı ile YeniSayfa.aspx'ten akış devam eder. Crawler indexler.*

**ASP.NET MVC** ile kullanılmak üzere *Response.RedirectToRoutePermanent()* methodu geliyor.

*Response.RedirectToRoute("Urunler-Listele", new { kategori = "yazilim" }); // HTTP 302 mesajı döner. Crawler indexlemez.*

yerine

*Response.RedirectToRoutePermanent("Urunler-Listele", new { kategori = "yazilim" }); // HTTP 301 mesajı döner. Crawler indexler.*

Sonuç olarak, ASP.NET 4.0 Arama Motoru Dostu ( SEO - Friendly ) uygulama yazmayı kolaylaştıran araçlara sahip olarak geliyor.

C# ile string sınıfına ContainsText isimli ExtensionMethod yazalım

C# ile string tipindeki bir değişkenin dolu olduğunu kontrol etmek için yapılması gereken iki şey vardır;

  • Değişkenin null olmadığını kontrol etmek
  • Değişkenin boş olmadığını kontrol etmek Aşağıdaki kod ile bu iki kontrolu doğru şekilde yapabiliriz;

string SiteUrl = “http://www.enginpolat.com”; if (SiteUrl != null && SiteUrl != “”) { }</pre> Daha iyi bir yöntem olarak aşağıdaki şekilde de yazabiliriz;

string SiteUrl = "http://www.enginpolat.com";
if (string.IsNullOrEmpty(SiteUrl) == false)
{
}

Fakat bu kod parçası ile ilgili canımı sıkan iki nokta var;

  • Karşılaştırma işleminde negatiflik aramak. string.IsNullOrEmpty fonksiyonu, değişkenin dolu olduğu değil, boş olduğu durumda true değer döndürüyor. (“Dolu mu?” yerine “Boş değil, değil mi?”)
  • Eğer bir değişkenin dolu olduğunu kontrol edeceksem, değişkenin ismini yazdıktan sonra karşılaştırma yapmam lazım. Yukarıdaki kodda ise, değişkenin ismini yazdıktan sonra başa dönüp, string.IsNullOrEmpty fonksiyonunu eklemem gerekiyor. Benim için kafa karışıklığı olan bu kod yerine aşağıdaki ExtensionMethod‘u kullanıyorum;
public static class ExtensionMethods
{
    public static bool ContainsText(this string Karsilastirilacak)
    {
        return string.IsNullOrEmpty(Karsilastirilacak) == false;
    }
}

*ContainsText* "C" harfi ile başladığı için, **Intellisense** ilk set ile birlikte gösteriyor.

C# switch ifadelerinde explicit fall through

Explicit Fall Through : Uygulamanın ilgili değişkenin değerine göre, switch ifadesindeki case‘lerden uygun olana dallanması ve break görene kadar, koddan aşağı doğru, diğer case‘lere girerek ilerlemesidir.

C# dilinde switch ifadelerinde explicit fall through desteklenmez.

Bu yüzden aşağıdaki kod, derleme zamanında hata verecektir ve derlenmeyecektir.

switch(değişken) { case 0: /// 0 durumda çalışacak kod case 1: /// hem 0, hem de 1 durumunda çalışacak kod case 2: /// hem 0, hem 1, hem de 2 durumunda çalışacak kod break; }</pre>

Yukarıdaki kod parçasını C#’ta çalıştırmak istiyorsak, aşağıdaki gibi yazabiliriz;

switch(değişken)
{
    case 0:
        /// 0 durumda çalışacak kod
        goto case 1;
    case 1:
        /// hem 0, hem de 1 durumunda çalışacak kod
        goto case 2;
    case 2:
        /// hem 0, hem 1, hem de 2 durumunda çalışacak kod
        break;
}


Bu sayede, case'ler arasındaki akış açıkça belirtilmiş olur.

XNA (XNA's not an acronym) ile Oyun Programlama

XNA Oyun Programlama yazı dizime bu yazımla başlıyorum. Öncelikle XNA nedir? biraz bundan bahsetmek istiyorum.

XNA, .Net ortamında 2D ve 3D oyun geliştirmek için, Microsoft tarafından üretilmiş bir framework‘tür. XNA bir programalama dili veya tekniği değildir, yüzlerce class’tan oluşan bir framework’tür.

XNA temelinde, Xbox platformu için .Net Compact Framework 2.0 ve Windows platformu için .Net Framework 2.0 vardır.

DirectX veya OpenGL‘in low-level fonksiyonlarıyla uğraşmak yerine programcıya, daha kolay yönetilebilir, kullanılabilir, OOP sınıflar sunacak şekilde kodlanmıştır.

Haliyle, oyun geliştirmeye başlamak isteyenler için güzel bir başlangıç noktasıdır.

Microsoft tarafından ilk olarak 14 Mart 2006 tarihinde San Jose California’da düzenlenen Game Developers Conference‘ta duyurulmuştur.

XNA ile geliştirilmiş oyunlar, .Net Compiler aracılığıyla MSIL‘e derlendiği için, ya olduğu gibi ya da çok az modifikasyonla framework kurulu tüm platformlarda çalıştırılabilir.

XNA geliştirmek için yapmamız gereken, bilgisayarımıza XNA Game Studio kurmak. Şu anda en güncel versiyon olan XNA Game Studio 3.1 şuradan indirilebilir.

Ne yazık ki XNA Game Studio 3.1 ve Visual Studio 2010 birbirlerini pek sevmiyorlar. O yüzden Visual Studio 2008 içerisinde XNA Game Project Template’lerinin nasıl göründüğüne bakalım;

Gördüğünüz gibi XNA ile Windows, Xbox ve Zune için oyun geliştirebiliyorsunuz.

Engin Polat hakkında

Chief Architect, Microsoft RD, Microsoft MVP

Ada ve Ege'nin babası ;)

Kategoriler

İstatistik

Makale Adedi: 458

Creative Commons Lisansı