C#nedir?com
 
YAZAR HAKKINDA
Serkan Yazıcıoğlu
Serkan Yazıcıoğlu
http://www.csharpnedir.com/
İletişme geçmek için tıklayın.
5 Makalesi yayınlanmakta.
Yazar hakkında detaylı bilgi için tıklayın.
Yayınlanan diğer makaleleri için tıklayın.
İlgili etiketler: birbirinden eventargs karakterler metodu querystring sayfanin sayfasi sayfaya sender string ulasmak veriler verileri vermek width: ASP.NET Serkan Yazıcıoğlu
 
YAZI HAKKINDA
Türü : Makale
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
Seviyesi : Başlangıç
Kategori : ASP.NET
Yayınlanma Tarihi : 14.9.2007
Okunma Sayısı : 94596
Yorum Sayısı : 18     yorum yaz
Site İçi AramaSİTE İÇİ ARAMA
Üye Girişini AçÜye GİRİŞİ
Üye girişi için tıklayın.
Kullanıcı Adı
Şifre
 
Beni her zaman hatırla
Bir hafta boyunca kullanıcı bilgilerinizi kullanıcı çıkışı yapana kadar hatırlar. (Paylaşılan bilgisayarlarda önerilmez.)
 
Şifremi / Kullanıcı Adımı unuttum.
 
.net TV RSS Serbest KÖŞE (?)
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
emre TAŞ
XML - Deniz Kılınç
emre TAŞ
yazının devamı >
emre TAŞ
Decompiling and Reverse Engineering .Net Radyo
emre TAŞ
yazının devamı >
emre TAŞ
Masaüstü mü ? İnternet Mi? .Net Radyo
emre TAŞ
yazının devamı >
emre TAŞ
.Net Kavramları - .Net Radyo
emre TAŞ
yazının devamı >
emre TAŞ
Yeni Başlayanlar için - .Net Radyo
emre TAŞ
yazının devamı >
Makale Gönder Bende Yazmak İstiyorum
.net TV RSSBlogroll
Turhal Temizer 'in Blogu
ChatBot UI Sample 21.10.2017
Turhal Temizer 'in Blogu
C# – IRR Function 21.10.2017
Burak Selim Şenyurt
Asp.Net Core'da Bir WebSocket Macerası 21.10.2017
Burak Selim Şenyurt
.NET Core 2.0 ile Basit Bir Web API Geliştirmek 21.10.2017
  Diğer Herşey
Sponsorlar
BT Akademi
Medya Portakal
Video Hosting Sponsoru
Csharpnedir.com bir Ineta üyesidir
Uzman Abi
Her Yönüyle C# - Sefer Algan
QueryString Kavramı
 
Kapat
Sayfayı Yazdır Sık Kullanılanlara Ekle Arkadaşıma Gönder MySpace Del.Ico.Us Digg Facebook Google Mixx Reddit StumbleUpon
Bilindiği üzere ASP.NET’te verileri saklama veya sayfalar arası taşıma işlemleri, Durum Yönetimi (State Management) adı altında sunulan seçenekler kullanılarak yapılır. Bu opsiyonlara bakarsak:

Durum Yönetimine Genel Bakış
-View State
-Control State
-Hidden Form Fields
-Cookies
-Query String
-Application State
-Session State
Şimdi QueryString özelliğini beraber inceleyelim.

QueryString soyut olarak nedir?

Sayfalar arası veri taşıma yollarından en kolayı olan QueryString yöntemi, URL üzerindeki stringler ile verileri taşımaya yarar. İnternette gezerken bir çok sitenin url adresleri garip harf ve sembollerle dolduğu dikkatinizi çekmiştir. İşte bu karakterler sunucu tarafında adrese eklenip sayfayla birlikte hareket eden QueryString'dir. Yeni sayfada bu link alınıp içindeki veriler sayfaya yerleştirilir. Fazla değerli verilerin olmadığı anlarda tercih edilmesi gereken yöntemdir çünkü taşınan veriler kullanıcının direk gözü önündedir. QueryString'in kullanımı çok kolaydır. Diğer bir güzel yanı ise URL adresinin içinde bulunmasından dolayı, sayfanın yerimlerine kaydedilmesi durumunda kendisinin de saklanmasıdır. Böylece yerimine gidildiğinde, sayfa saklandığı haldeki şekliyle açılır.

QueryString somut olarak nedir?

Öncelikle verilmesi gereken örnek heralde bir QueryString'in ekran görüntüsüdür.

Buradaki linkte site adındaki ’?’ işaretinden sonra gelen parametreler QueryString vasıtasıyla gelmiştir. Şimdi bu parametrelerin buraya nasıl eklendiğine bir bakalım.

2 dk. öncesi

Yeni açtığımız bir siteye iki adet aspx sayfası ekleyelim ve ilk sayfaya şu kodu yazalım:

protected void Page_Load(object sender, EventArgs e)
{
     Response.Redirect("default2.aspx?isim=Serkan&soyisim=Yazicioglu");
}
Bu sayfa çalıştırıldığında default2.aspx sayfası yukarıdaki resimde görüldüğü gibi belirecektir. QueryString sayfalar arasında veri taşıdığı için Response.Redirect içinde yer alan URL adresine bu sayfadaki veriler eklenir. Daha sonra diğer sayfanın Page Event'leri çalıştırıldığında bu veriler işleme tabi tutulur. Anlaşıldığı üzere QueryString'de iki adet önemli sembol vardır. Birincisi '?' işaretidir. Bu sembol sayfanın url adresi ile QueryString verilerini birbirinden ayırır. Bu işaretten sonra ne yazarsak yazalım sayfanın bulunamaması gibi bir hata oluşmayacaktır. '&' sembolü ise taşınan verileri birbirinden ayırmaktadır. Birden fazla veri taşınması durumunda araya hep ampersand koyulmalıdır. Örnek vermek gerekirse sayfamızda 3 adet TextBox nesnesi oluşturalım ve Text özelliklerini dinamik olarak QueryString'e ekleyelim:

protected void Button1_Click(object sender, EventArgs e)
{
    Response.Redirect("default2.aspx?isim=" + TextBox1.Text + "&soyisim=" + TextBox2.Text + "&id=" + TextBox3.Text);
}
Peki QueryString nereden türemektedir? Buna bakmak için ise 'GoToDefinition' yapalım:

public sealed class HttpRequest
{
    ...
    public NameValueCollection QueryString { get; }
    ...
}
Görüldüğü üzere QueryString bir property'dir. HttpRequest sınıfı, request sırasında kullanıcının gönderdiği HTTP tipindeki verilere ASP.NET'in ulaşmasını sağlar. NameValueCollection sınıfı ise (System.Collections.Specialized isimalanı altındadır) string tipinden bir adet 'Key' ve bir adet 'Value' saklamaktadır.

QueryString'e diğer sayfadan ulaşmak için Request.QueryString yazılır. QueryString'in içerisindeki verilere ise indeks veya 'Key' değeri üzerinden şu yöntemler kullanılırarak ulaşılabilir:

//Key değeri üzerinden ulaşmak için:
string str = Request.QueryString["Key"];
//veya
string str = Request.QueryString.Get("Key");

//Indeks üzerinden ulaşmak için:
string str = Request.QueryString[0];
//veya
string str = Request.QueryString.Get(0);

//Tüm verilere ulaşmak için ise for döngüsü kullanmalıyız. Çünkü QueryString'in 'Request.QueryString.Values' adlı bir property'si bulunmamaktadır.
for (int i = 0; i < Request.QueryString.Count; i++)
{
     DropDownList1.Items.Add(Request.QueryString[i]);
}
QueryString'de 'Key' değerleri farklı olmak zorunda değildir. 'Key' değerlerinin aynı olacağı durumlarda şuna dikkat edilmelidir:

//default.aspx.cs

protected void Page_Load(object sender, EventArgs e)
{
     Response.Redirect("default2.aspx?1=bir&1=iki&1=üç");
}

//default2.aspx.cs

protected void Page_Load(object sender, EventArgs e)
{
     for (int i = 0; i < Request.QueryString.Count; i++)
     {
          DropDownList1.Items.Add(Request.QueryString[i]);
     }
}
Bu şekilde yazdığımız taktirde karşımıza şu sonuç çıkacaktır:

Burada aynı 'Key' değerine sahip veriler tek bir string olarak alınmıştır. Bu string değerlerini birbirinden ayırmak için GetValues metodu kullanılır:

//default2.aspx.cs

protected void Page_Load(object sender, EventArgs e)
{
     foreach (string str in Request.QueryString.GetValues("1")) //GetValues metodu parametre olarak 'Key' veya indeks almaktadır.
     {
          DropDownList1.Items.Add(str);
     }
}
Böylelikle QueryString içerisindeki aynı 'Key' değerine sahip verileri birbirinden ayırmış oluruz:

Response.Redirect yerine Server.Transfer metodunu kullanmak

Server.Transfer metodu bilindiği üzere tarayıcının bir sayfaya yönlendirilmesi sırasında tarayıcıdaki URL adresinde bir değişiklik yapmaz. Dolayısıyla bu metodu kullanmak QueryString'in URL'de görünmemesini sağlar. Örnek vermek gerekirse 2 adet aspx sayfası açıp, ilkine bir button ikincisine ise bir Label nesnesi ekleyelim. Code-Behind tarafımız ise şöyle olsun:

//default.aspx.cs

protected void Page_Load(object sender, EventArgs e)
{
}

protected void Button1_Click(object sender, EventArgs e)
{
     Server.Transfer("default2.aspx?id=Transfer Metodu", true); //Buradaki ikinci özellik ise bool bir değer alıp QueryString gibi diğer sayfaya geçebilecek nesnelerinin gönderilip gönderilmeyeceğini belirtir.
}

//default2.aspx.cs

protected void Page_Load(object sender, EventArgs e)
{
     Label1.Text = Request.QueryString.Get(0);
}
Default.aspx sayfamız çalıştırıldığında tarayıcıdaki görüntü ilk başta şöyledir:

Daha sonrasında Button1'e basıldığında ise 2. sayfamız tarayıcıya gelmektedir:

Görüldüğü üzere sayfa değişmesine rağmen URL adresi değişmemiş dolayısıyla da QueryString kullanıcıya gösterilmemiştir. Server.Transfer metodu ise kullanım açısından Redirect metodu ile aynıdır.

QueryString'e eklenemeyen karakerler

QueryString'e '#', '+', '&' gibi bazı semboller eklenirken hatalar olmaktadır. Bu hataları önlemek için Server.UrlEncode metodu kullanılmalıdır.

protected void Button1_Click(object sender, EventArgs e)
{
     string encoded = Server.UrlEncode(TextBox1.Text);
     Response.Redirect("default2.aspx?name=" + encoded);
}
Bu metod çalıştırıldığında karakterler QueryString vasıtasıyla taşınabilecektir. Bu özelliğin kötü yanı QueryString'i uzatmasıdır. Ayrıca bazı sorunlar da çıkarabilir. Örnek vermek gerekirse '&' karakterinden sonra '#' karakteri gelirse bazı güvenlik önlemlerinden dolayı (cross-site scripting attack gibi) ASP.NET hata verebilir.

URL boyutlarında sınır
Tarayıcılar URL adreslerinin çok şişmesini önlemek için belirli sınırlar koymuşlardır. Bu sınıra adres ve diğer karakterler de dahildir ve artan karakterler URL'e eklenmez. Tarayıcılar arasında en düşük sınıra sahip olanı Internet Explorer'dır ve maksimum 2047 bayt almaktadır. Dolayısıyla QueryString'lerimizi bu değere yaklaştırmamaya dikkat etmemiz gerekir.
An itibariyle bu makalemizin sonuna gelmiş bulunmaktayız. Artık QueryString nedir, ne değildir onu da öğrendiğimize göre rahat bir uyku çekebiliriz. Herkese iyi günler.

Serkan Yazıcıoğlu
serkanyazicioglu@gmail.com

Makale:
QueryString Kavramı ASP.NET Serkan Yazıcıoğlu
  • Yazılan Yorumlar
  • Yorum Yaz
ARA
3
2012
kerem kızılhan yorumlara for döngüsü mü eklemiş :) güzel bir makale yararlı buldum teşekkürler takipteyim :)
HAZ
20
2010
teşekkürler
HAZ
20
2010
teşekkürler
HAZ
20
2010
teşekkürler
HAZ
20
2010
teşekkürler
HAZ
20
2010
teşekkürler
HAZ
20
2010
teşekkürler
HAZ
20
2010
teşekkürler
HAZ
20
2010
teşekkürler
HAZ
20
2010
teşekkürler
HAZ
20
2010
teşekkürler
HAZ
20
2010
teşekkürler
HAZ
20
2010
teşekkürler
HAZ
20
2010
teşekkürler
HAZ
20
2010
teşekkürler
Sayfalar : 1 2 
Yorum yazabilmek için üye girişi yapmalısınız. Üye girişi için tıklayın.
Üye değilseniz Üyel Ol linkine tıklayarak üyeliğinizi hemen başlatabilirisniz.
 
  • Bu Konuda Son 10
  • Eklenen Son 10
  • Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor