query string چیست و چه معایبی دارد؟
حتما شما هم در بخی از url ها علامت سوال (؟) را دیده اید که در ادامه آن کاراکترهایی قرار گرفته اند. به این رشته کاراکتر کوئری استرینگ گفته می شود. در این مقاله می خوانید که 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
- Webform2.aspx : این صفحه ای است که به آن انتقال خواهید یافت.
- name=Sajad : این قسمت مقدار متغییر name را ارسال میکند.
lastName=Bakhtyar
: این مقدار متغییر lastName را ارسال میکند.
همانطور که متوجه شدید در داخل یک Query String از & برای جدا سازی متغییر ها استفاده می شود. ساخت یک Query string در 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 string می سازد و محتویات 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 String
- Query String ها محدودیت طول دارند، در صورتی که اطلاعات زیادی را از این طریق بخواهیم ارسال کنیم با مشکل مواجه میشویم.
- رشته ی Query String قابل مشاهده در Address Bar مرورگر ها است، به همین دلیل نمیتوان از انتقال اطلاعات مهم از این طریق اقدام کرد.
- Query String نمیتواند کاراکتر های & و فاصله را انتقال دهد.
به طور مثال اگر شما از کد زیر استفاده کنید، متوجه خواهید شد که در انتقال کاراکتر های فاصله و & دچار مشکل است. برای حل این مشکل باید در متن به جای استفاده از کاراکتر فاصله باید از ۲۰% استفاده و به جای استفاده از & باید از ۲۶% استفاده کرد. به طور مثال شما میتوانید کد زیر را به جای کد موجود در 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));
}
سوالات متداول
درصورتی که اطلاعات زیادی از طریق QueryString ها بخواهیم ارسال کنیم با چه مشکلی مواجه میشیم؟