url Routing در ASP.NET
چرا Routing :
امروزه اکثر وب سایت ها دارای دیتابیس و تمامی کارها را بر اساس دیتابیس خود انجام میدهند . همانطور که می دانید برای انتقال یه یک صفحه و نمایش اطلاعاتی در مورد یک محصول یا آیتم نیاز است اطلاعاتی را مابین صفحات انتقال دهیم مانند ID محصول . در بیشتر وب سایت ها url های شبیه به url زیر دیده می شود که مقادیری را به صفحه مورد نظر از طریق Query String پاس می دهند. :
1 |
http://mayurlohite.com/page.aspx?productID=1 &Productnane=visual-studio |
مشکل URL بالا چیست ؟
بیشتر search Engin ها مخصوصا Google صفحاتی را که در آنها علامت ? بکار رفته باشد را ایندکس نمی کنند .
امروره اکثر وب سایت ها دارای url های منظم و با معنا هستند به طوریکه به خاطر سپردن آنها خیلی راحت می باشد.Routing همچنین از نظر سئو و موتور های جستجو هم دارای اهمیت زیادی می باشد.
URL بالا که در مورد معایب آن گفتیم بعد از routing به صورت زیر تبدیل خواهد شد که خوانایی و به خاطر سپردن آن نسبت به روش اول خیلی راحتر می باشد .
1 |
http://mayurlohite.com/displayproduct/1/visual-studio |
در این مقاله برای Route کردن صفحات از فضای نام System.Web.Routing و فایل Global.asax استفاده می کنیم .
1- فضای نام System.Web.Routing به فایل Global.asax اضافه می کنیم .
2- برای تعریف الگوهای تبدیل url از RouteTable.Routes.MapPageRoute استفاده میکنیم .
1 2 3 4 |
protected void Application_Start(object sender, EventArgs e) { RouteTable.Routes.MapPageRoute("Product", "Product/{Name}", "~/Product.aspx"); } |
تابع RouteTable.Routes.MapPageRoute سه پارامتر از ورودی می گیرد :
پارامتر اول نام الگو می باشد و مقدار آن باید برای هر الگو منحصر بفرد باشد .
پارامتر دوم الگویی است که ما تعریف میکنیم ، که توسط آن تعیین می کنیم مثلا آدرس هایی مثل product/name به آدرس پارامتر سوم برود .
و پارامتر سوم مسیری اصلی است .
توضیح :
پارامتر اول نامی است که برای الگو تعریف کرده ایم . پارامتر دوم دارای اهمیت می باشد . مثلا با تعریف الگوی بالا می توانیم آدرس هایی مثلا موبایل/product به صفحه product.aspx انتقال دهیم .
در واقع موبایل/product همانند آدرس “موبایل”=product.aspx?name می باشد .
در صفحه product.aspx برای گرفتن مقدار Name به صورت زیر عمل می کنیم :
1 |
Page.RouteData.Values["Name"] |
route کردن صفحه مقالات این سایت (صفحه جاری ) به صورت زیر تعریف شده است :
1 |
route.MapPageRoute("Article", "Article/{AID}/{*Title}", "~/Article.aspx"); |
که نمونه ای از آدرس آن در همین سایت مانند زیر خواهد شد :
1 |
http://hozhan.ir/Article/29/-white-space-in-CSS/ |
دلیل استفاده از Title در URL جهت تاثیر آن از نظر سئو است .
که عدد 29 مقدار( Article ID) وTitle برای نمایش عنوان مقاله .
کاراکتر * : برای اختیاری قرار دادن ، مقدار دهی به یک پارامتر می توانید از کاراکتر * استفاده کنید . در صورتی که کاراکتر * را ننوشته بودیم آدرس زیر با خطای Page not found مواجه می شدیم .
1 |
http://hozhan.ir/Article/29/ |
در پارامتر دوم الگوی مورد نظر خود را می تونید تعریف کنید و برای تعریف کردن پارامتر های مورد نیاز خود آنها را در داخل {} قرار دهید و نامی را به آن اختصاص دهید .
گرفتن مقدار موجود در پارامتر ها :
برای به دست آوردن مقدار موجود در پارامتر های یک آدرس از کد زیر استفاده می کنیم :
1 |
Page.RouteData.Values["Name"] |
ساخت لینک به صورت داینامیک :
1 |
<a href='<%# string.Format("/Article/{0}/{1}",Eval("AID"),Eval("Title").ToString().Replace(" ","-")) %>'> |
کاراکتر هایی برای مرورگر های غیر مجاز و تعدادی دیگر از کاراکتر ها مرورگر آنها را به گونه ای دیگر تفسیر خواهد کرد. مرورگر کاراکتر فاصله را با کاراکتر هایی مانند % جایگزین خواهد کرد ، برای جلوگیری از این جایگزینی می توانید کاراکترهای فاصله را با – جایگزین کنید .
الگوی فوق تقریبا آدرس مانند زیر خواهد شد :
hozhan.ir/Article/1/قسمت-اول-css–اصول اولیه
برای نظم بهتر پروژه می توانید تمامی الگوهای تعریف شده را در یک تابع جداگانه قرار دهید مانند زیر :
1 2 3 4 5 6 7 8 9 10 11 |
void Application_Start(object sender, EventArgs e) { RoutingSite(System.Web.Routing.RouteTable.Routes); } public static void RoutingSite(System.Web.Routing.RouteCollection route) { route.MapPageRoute("Product", "Product/{PID}/{PT}", "~/Product.aspx"); route.MapPageRoute("Article", "Article/{AID}/{*Title}/", "~/Article.aspx"); } |
نکته :
زمانیکه تعداد / در url بیشتر از یک عدد باشد مثلا آدرس زیر :
1 |
www.mysite.ir/product/34/visual-stadio |
در این حالت برای مسیر دهی سازگار به لینک ها و فایل های css و js باید از ResolveUrl استفاده کنید و یا اینکه به ابتدای تمامی آدرس های یک / اضافه نمایید :
1 |
<script type='text/javascript' src='<%= ResolveUrl("~/Scripts/test.js") %>'></script> |
نکته :
همانطور که گفتیم بعضی از کاراکتر های غیر مجاز می باشد مثل . (نقطه) . اگر url دارای نقطه باشد مانند آدرس زیر(نقطه بعد از asp) باعث خطای 404 خواهد شد :
1 |
www.yoursite.com/article/12/asp.net |
برای جلوگیری از ایجاد خطا در این مواقع باید یک / به انتهای آدرس اضافه نمایید .
1 |
www.yoursite.com/article/12/asp.net/ |
دیدگاهتان را بنویسید
برای نوشتن دیدگاه باید وارد بشوید.