url mapping

url های با معنا و تمیز یکی از مزایای یک وب سایت خوب است.

بعنوان مثال آدرس زیر را در نظر بگیرید که یک صفحه که یک گروه خاص از محصولات را نشان می دهد:

 http://www.mysite.com/products.aspx?category=software

با استفاده از  url mapping در ASP.NET  می توان برنامه را طوری پیکربندی نمود که به جای URL فوق URL زیر را بپذیرد.

 http://www.mysite.com/products/software

در ASP.NET  دو   ماژول برای تغییر آدرسها  وجود دارند :

  • IIS URL Rewriting
  • ASP.NET Routing

 

IIS URL Rewriting

هنگامی که از طرف یک کلاینت آدرس خاصی از وب سرور تقاضا می شود url rewrite آدرس را آنالیز کرده و به آدرس دیگه ای در همان سرور منتقل می کند این پروسه در مراحل ابتدایی چرخه پاسخگویی به درخواست شروع می شود :(در تصویر زیر این موضوع رو می تونید ببینید )

 

ASP.NET Routing

کار این کلاس نیز تغییر ومدیریت آدرسهاست ولی همان طور که در شکل ذیل می بینید در چرخه یک درخواست  کلاینت از وب سرور در مراحل پایین تری کار خود را شروع می کند :

 

تفاوتهای این دو :

URL rewriting    قبل از این که درخواست توسط وب سرور هندل شود آدرسها رو تغییر می دهد بدون این که هیچ اطلاعاتی درباره هندلر مربوطه داشته باشد .و همچنین هندلر اصلی از این که آدرس قبلا تغییر کرده اطلاعی ندارد .

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

به جز این دو تفاوت مفهومی چند اختلاف عملکردی نیز وجود داره :

iis url rewrite  در تمامی انواع وب اپلیکیشنها قابل پیاده سازی است در حالی که routing  مختص دات نت است .

iis url rewrite  چه  app pool استفاده شده شما کلاسیک باشه  یا integrated  براش فرقی نمی کنه اما در routing  چنانچه app pool  شما کلاسیک باشه با توجه به این که در این حالت کلیه مسیرها باید به پسوند ختم شوند با مشکل مواجه خواهیم شد که برای حلش باید باید یا تنظیمات Wildcard map را از طریق IIS انجام دهید یا از hotfixای که در لینک ذیل وجود دارد استفاده کنید تا درخواست هایی که پسوند ندارند نیز به شکلی صحیح توسط Routeها پردازش شوند:


http://support.microsoft.com/kb/980368

لذا در routing ترجیحا باید از integrated  استفاده شود .

ماژول   the url rewrite   در نسخه فعلی قابل توسعه نیست ولی asp.net routing  کاملا توسعه پذیر و قابلیت سفارشی سازی است .

توصیه : به شدت  routing   رو پیشنهاد می کنم در نسخه  3.5 دات نت  یه خورده مشکلتره ولی در دات نت 4  خیلی راحت قابل پیاده سازی است .