query string چیست و چه معایبی دارد؟

query string

حتما شما هم در بخی از url ها علامت سوال (؟) را دیده اید که در ادامه آن کاراکترهایی قرار گرفته اند. به این رشته کاراکتر query string گفته می شود. در این مقاله می خوانید که query string چیست و چه معایبی دارد.

query string چیست؟

برای انتقال اطلاعات بین صفحات asp.net چندین انتخاب وجود دارد که یکی از این راه ها استفاده از  Query String و  آبجکت Request است. زمانی که شما در حال گذر در  اینترنت هستید ممکن است با صفحات عجیبی مثل:

http://www.localhost.com/Webform2.aspx?name=Sajad&lastName=Bakhtyari

مواجه شوید. این آدرس های Html از Query String برای انتقال اطلاعات بین صفحات استفاده میکند.

کوئری استرینگ در واقع یکی از روشهای انتقال متغیرها و داده از یک صفحه به صفحه دیگر است. Query String عموما در صفحات وب که نیاز به انتقال اطلاعات از یک صفحه به صفحه ی دیگر است، استفاده می شود. به طور مثال شما در صفحه اول اطلاعاتی مانند نام و نام خانوادگی را از بینندگان وب سایت خود دریافت می کنید و در صفحه ی بعد مشتری را با نام خودش مورد خطاب قرار می دهید.

کوئری استرینگ تشکیل شده است از هر مقداری که بعد از علامت سوال (“?”) در انتهای URL قرار می‌گیرد که می تواند شامل یک یا چند پارامتر باشد.

برای کسب اطلاعات در حوزه ی asp.net چیست به شما پیشنهاد می شود مقاله ما را مطالعه نمایید.

ساختار query string در asp.net

به طور مثال در آدرس مذکو شما ۳نوع داده را ارسال می کنید:

http://www.localhost.com/Webform2.aspx?name=Sajad&lastName=Bakhtyari

  1.  Webform2.aspx : این صفحه ای است که به آن انتقال خواهید یافت.
  2. name=Sajad : این قسمت مقدار متغییر name را ارسال میکند.
  3. lastName=Bakhtyar: این مقدار متغییر lastName را ارسال میکند.

همانطور که متوجه شدید در داخل یک Query String از & برای جدا سازی متغییر ها استفاده می شود. ساخت یک Query در Asp.Net بسیار ساده است، به طور مثال پروژه ای ایجاد کنید که دارای ۲ فرم باشد و در فرم اول ۲ عدد Text Box و یک Button قرار دهید. سپس در رویداد Click آن کد زیر را قرار دهید.

private void btnSubmit_Click(object sender, System.EventArgs e)

{

Response.Redirect(“Webform2.aspx?Name=” +

this.txtName.Text + “&LastName=” +

this.txtLastName.Text);

}

قسمت اول این کد یک query می سازد و محتویات TextBox ها را به فرم دوم ارسال میکند. حال برای دریافت اطلاعات ارسال شده در فرم دوم باید کد زیر را در قسمت page_load قرار دهید.

private void Page_Load(object sender, System.EventArgs e)
{
this.txtBox1.Text = Request.QueryString["Name"];
this.txtBox2.Text = Request.QueryString["LastName"];
}

Request.QueryString  در اینجا از یکی از راه ای موجود مقدار دهی شده است. شما میتوانید از روش های مختلفی محتویات Querystring را بازیابی کنید. مثلا:

private void Page_Load(object sender,
System.EventArgs e)
{
this.txtBox1.Text = Request.QueryString[0];
this.txtBox2.Text = Request.QueryString[1];
}

راه دیگر بازیابی محتویات Querystring بدون نام بردن تک تک متغیر ها استفاده از حلقه ها است، مانند:

foreach( string s in Request.QueryString)
{
Response.Write(Request.QueryString[s]);
}

ویا

for (int i =0;i < Request.QueryString.Count;i++)
{
Response.Write(Request.QueryString[i]);
}

معایب Query

  1. Query ها محدودیت طول دارند، در صورتی که اطلاعات زیادی را از این طریق بخواهیم ارسال کنیم با مشکل مواجه میشویم.
  2. رشته ی Query قابل مشاهده در Address Bar مرورگر ها است، به همین دلیل نمیتوان از انتقال اطلاعات مهم از این طریق اقدام کرد.
  3. Query نمیتواند کاراکتر های & و فاصله را انتقال دهد.

به طور مثال اگر شما از کد زیر استفاده کنید، متوجه خواهید شد که در انتقال کاراکتر های فاصله و & دچار مشکل است. برای حل این مشکل باید در متن به جای استفاده از  کاراکتر فاصله باید از ۲۰% استفاده و به جای استفاده از & باید از ۲۶% استفاده کرد. به طور مثال شما میتوانید کد زیر را به جای کد موجود در button خود قرار دهید.

private void btnSubmit_Click(object sender, System.EventArgs e)
{
string p1 = this.txtName.Text.Replace("&","%26");
p1 = this.txtName.Text.Replace(" ","%20");
string p2 = this.txtLastName.Text.Replace("&","%26");
p2 = this.txtName.Text.Replace(" ","%20");
            "WebForm2.aspx?" +
            "Name=" + p1 +
            "&LastName=" + p2;
Response.Redirect(p2);
}

حال برای اینکه دیگر نیازی به جایگزینی کاراکتر های فاصله و & با ۲۰% و ۲۶% نباشد میتوانید از متد Server.UrlEncode. Server.UrlEncode استفاده نمایید تا Query string شما را encode کرده و دیگر به مشکل برخورد نکنید.

کد زیر بیانگر این موضوع است.

private void btnSubmit_Click(object sender, System.EventArgs e)
{
Response.Redirect("WebForm2.aspx?" +
"Name=" +   Server.UrlEncode(this.txtName.Text) +
"&LastName=" + Server.UrlEncode(this.txtLastName.Text));
}

آخرین نوشته ها

تماس با ما

 کرج، شاهین ویلا، بلوار امام خمینی ، خیابان نهم شرقی ، برج شاهین ،طبقه اول واحد2

 91014618

  info@shopingserver.net

با تلفن ثابت بدون پیش شماره قابل شماره گیری هست و در صورتی که با تلفن همراه قصد تماس گرفتن دارید از پیش شماره استان خود را اول شماره وارد نمایید.

Erfan Akbarieh

Erfan Akbarieh

مطالب مرتبط