url Routing در ASP.NET

چرا Routing :
امروزه اکثر وب سایت ها دارای دیتابیس و تمامی کارها را بر اساس دیتابیس خود انجام میدهند . همانطور که می دانید برای انتقال یه یک صفحه و نمایش اطلاعاتی در مورد یک محصول یا آیتم نیاز است اطلاعاتی را مابین صفحات انتقال دهیم مانند ID محصول . در بیشتر وب سایت ها url های شبیه به url زیر دیده می شود که  مقادیری  را به صفحه مورد نظر از طریق Query String پاس می دهند. :

http://mayurlohite.com/page.aspx?productID=1 &Productnane=visual-studio

 مشکل URL بالا چیست ؟

بیشتر search Engin ها مخصوصا Google صفحاتی را که در آنها علامت ? بکار رفته باشد را ایندکس نمی کنند .

امروره اکثر وب سایت ها دارای url های منظم و با معنا هستند به طوریکه به خاطر سپردن آنها خیلی راحت می باشد.Routing  همچنین از نظر سئو و موتور های جستجو هم دارای اهمیت زیادی می باشد.
URL بالا که در مورد معایب آن گفتیم بعد از routing به صورت زیر تبدیل خواهد شد که خوانایی و به خاطر سپردن آن نسبت به روش اول خیلی راحتر می باشد .

http://mayurlohite.com/displayproduct/1/visual-studio

در این مقاله برای Route کردن صفحات از فضای نام System.Web.Routing و فایل Global.asax استفاده می کنیم .


1- فضای نام System.Web.Routing به فایل Global.asax اضافه می کنیم .
2- برای تعریف الگوهای تبدیل url از RouteTable.Routes.MapPageRoute استفاده میکنیم .

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 به صورت زیر عمل می کنیم :

Page.RouteData.Values["Name"]

 route کردن صفحه مقالات این سایت (صفحه جاری ) به صورت زیر تعریف  شده است :

 route.MapPageRoute("Article", "Article/{AID}/{*Title}", "~/Article.aspx");

که نمونه ای از آدرس آن در همین سایت مانند زیر خواهد شد :

http://hozhan.ir/Article/29/-white-space-in-CSS/ 

دلیل استفاده از Title در URL جهت تاثیر آن از نظر سئو است .

که عدد 29 مقدار( Article ID) وTitle برای نمایش عنوان مقاله . 

کاراکتر * : برای اختیاری قرار دادن  ، مقدار دهی به یک پارامتر می توانید از کاراکتر *  استفاده کنید . در صورتی که کاراکتر * را ننوشته بودیم آدرس زیر با خطای Page not found مواجه می شدیم .

http://hozhan.ir/Article/29/ 

 در پارامتر دوم الگوی مورد نظر خود را می تونید تعریف کنید و برای تعریف کردن پارامتر های مورد نیاز خود آنها را در داخل {} قرار دهید و نامی را به آن اختصاص دهید .
گرفتن مقدار موجود در پارامتر ها :
برای به دست آوردن مقدار موجود در پارامتر های یک آدرس  از کد زیر استفاده می کنیم :

Page.RouteData.Values["Name"]

ساخت لینک به صورت داینامیک :

<a href='<%# string.Format("/Article/{0}/{1}",Eval("AID"),Eval("Title").ToString().Replace(" ","-")) %>'>

کاراکتر هایی برای مرورگر های غیر مجاز و تعدادی دیگر از کاراکتر ها مرورگر آنها را به گونه ای دیگر تفسیر خواهد کرد. مرورگر کاراکتر فاصله را با کاراکتر هایی مانند % جایگزین خواهد کرد ، برای جلوگیری از این جایگزینی می توانید کاراکترهای فاصله را با - جایگزین کنید .
الگوی فوق تقریبا آدرس مانند زیر خواهد شد :

hozhan.ir/Article/1/قسمت-اول-css–اصول اولیه

برای نظم بهتر پروژه می توانید تمامی الگوهای تعریف شده را در یک تابع جداگانه قرار دهید مانند زیر :

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 بیشتر از یک عدد  باشد مثلا آدرس زیر :

 www.mysite.ir/product/34/visual-stadio

در این حالت برای مسیر دهی سازگار به لینک ها و فایل های css و js  باید از ResolveUrl استفاده کنید و یا اینکه به ابتدای تمامی آدرس های یک / اضافه نمایید :

<script type='text/javascript' src='<%= ResolveUrl("~/Scripts/test.js") %>'></script>

 نکته :

همانطور که گفتیم بعضی از کاراکتر های غیر مجاز می باشد مثل . (نقطه) . اگر url دارای نقطه باشد مانند آدرس زیر(نقطه بعد از asp)  باعث خطای 404  خواهد شد :

www.yoursite.com/article/12/asp.net  

برای جلوگیری از ایجاد خطا در این مواقع باید یک / به انتهای آدرس اضافه نمایید . 

www.yoursite.com/article/12/asp.net/ 

 دانلود کدهای پروژه


توسط : عثمان رحیمی  2 ماه قبل ، دوشنبه 10 شهریور 1393 ساعت 21:53  2  3993

نظر شما برای ما مهم است و به ما در بهبود سایت کمک میکند.


ارسال نظر
  • نام (اختیاری ) :
  • پست الکترونیک :
  • توضیحات :

مطالب مرتبط

نظرات خوانندگان

کاربر مهمان (حسن اسدی)  در تاریخ : 7 ماه قبل ، یکشنبه 23 فروردین 1394 ساعت 00:00

آموزشتون بسیار عالی و همراه با جزییات بود.

کاربر مهمان (kvn)  در تاریخ : 7 ماه قبل ، چهارشنبه 8 اردیبهشت 1395 ساعت 00:00

بسیار خوب و با مثال‌های مناسب و خیلی کامل توضیح داده شده بود. متشکرم