در 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 خیلی راحت قابل پیاده سازی است .
منبع :
http://stackoverflow.com/questions/90112/iis-url-rewriting-vs-url-routing