در برنامه های ASP.NET Core برای تغییر مسیر به یک URL خاص روش های مختلفی وجود دارد. در این مقاله با این تکنیک ها و کدهای مورد نیاز برای تغییر مسیر یک درخواست در ASP.NET Core آشنا می شویم.
بر اساس برخی شرایط مانند هدایت کاربر به صفحه ورود در صورت عدم وجود session معتبر، هدایت مجدد کاربران به صفحه اصلی در صورت ورود موفقیت آمیز، هدایت کاربر برای تغییر صفحه رمز عبور پس از انقضای رمز عبور ، هدایت به صفحه توضیحات خطا در صورت بروز یک استثنا غیرمنتظره و غیره همیشه نیاز به تغییر مسیر به یک URL دیگر وجود خواهد داشت.
روش های پیاده سازی برای Redirect و تغییر مسیر یک درخواست در ASP.NET Core
ممکن است دلایل زیادی برای Redirect و تغییر مسیر به صورت موقت یا دائم از URL فعلی به URL دیگر وجود داشته باشد. چندین نوع روش در ASP.NET Core وجود دارد که با استفاده از آن ها می توانیم درخواست را در ASP.NET Core تغییر مسیر دهیم. بیایید به جزئیات این روش ها نگاهی کنیم و راه های درخواست تغییر مسیر در ASP.NET Core را درک کنیم.
روش های موجود در ASP.NET Core برای تغییر مسیر به شرح زیر است:
• Redirect
• RedirectToAction
• RedirectToPage
• RedirectToRoute
• LocalRedirect
هر یک از روشهای بالا دارای تفاوت هایی هستند و وضعیت های HTTP مختلف مانند 302 – Found یا 301 – Moved Permanently یا 307 – Temporary Redirect یا 308 – Permanent Redirect را بر می گردانند.
کدهای وضعیت HTTP
302 - Found:
این کد وضعیت به این معنی است که URL منبع درخواستی به طور موقت هدایت شده است و ممکن است در درخواست های بعدی تغییراتی در آن ایجاد شود. بنابراین clientها باید به استفاده از URL درخواستی ادامه دهند.
301 - Moved Permanently:
این کد وضعیت به این معنی است که URL منبع درخواستی به طور دائم تغییر کرده و URL جدید در پاسخ مشخص شده است.
307 - Temporary Redirect:
این وضعیت مانند 302 است، با این استثنا که عامل کاربر در هنگام فراخوانی URL تغییر مسیر داده شده نباید روش HTTP استفاده شده را تغییر دهد، یعنی اگر در درخواست اصلی POST استفاده شده است، POST باید در URL تغییر مسیر داده شده نیز استفاده شود.
308 - Permanent Redirect:
این وضعیت مانند 301 - Move Permanently است با این تفاوت که عامل کاربر در هنگام فراخوانی URL تغییر مسیر داده شده نباید روش HTTP استفاده شده را تغییر دهد، یعنی اگر در درخواست اصلی از POST استفاده شده است، POST باید در URL هدایت شده نیز استفاده شود.
ایجاد پروژه ASP.NET Core MVC برای نمایش Redirect ها
برای بررسی Redirect و تغییر مسیرها، از Visual Studio 2022 Community Edition با net6 برای ایجاد برنامه وب ASP.NET Core 6 استفاده کرده ایم.
برای نمایش نتایج Redirect ها ، یک PoliciesController ایجاد کرده ایم و یک action به نام PrivacyPolicy به آن اضافه کرده ایم.
در زیر تکه کد PoliciesController و PrivacyPolicy.cshtml آمده است.
بیایید نحوه استفاده، نوع بازگشتی و کد وضعیت HTTP هر یک از روشهای Redirect را با جزئیات درک کنیم.
روش Redirect
روش Redirect برای تغییر مسیر درخواست در ASP.NET Core از یک URL به URL دیگر استفاده می شود. این روش می تواند برای تغییر مسیر بر اساس برخی شرایط استفاده شود. متد Redirect بخشی از کلاس Controllerbase است بنابراین مستقیماً برای استفاده در Controller در دسترس است و یک URL را به عنوان یک رشته ورودی دریافت می کند.
این متد به ما این امکان را می دهد که به یک URL خاص به جای برخی از action ها در برخی کنترلرها تغییر مسیر دهیم. این URL می تواند در داخل برنامه باشد یا می تواند آدرس برخی از برنامه های شخص ثالث دیگر نیز باشد.
این متد یک شی RedirectResult ایجاد می کند که درخواست را به URL مشخص شده هدایت می کند.
در تکه کد زیر نحوه استفاده از متد Redirect در ASP.NET Core MVC نشان داده شده است.
کد بالا مربوط به اکشن Privacy در کنترلر Home است. وقتی اکشن Privacy در کنترلر Home را فراخوانی میکنیم، درخواست را به یک Url مشخص، یعنی اکشن PrivacyPolicy در کنترلر Policies هدایت میکند.
هنگامی که Home/Privacy فراخوانی میشود، یک شی RedirectResult با کد وضعیت 302 - Found برمیگرداند و همچنین هدر Location را روی URL هدفی که در روش Redirect در بالا مشخص شده است، تنظیم میکند.
مرورگر در صورت مواجهه با کد وضعیت 302، هدایت مجدد را به Url جدید Policies/PrivacyPolicy انجام میدهد. در زیر جزئیات مربوط به ابزارهای توسعه دهنده مرورگر (F12) نشان داده شده است.
روش RedirectPermanent
این روش شبیه Redirect است اما در کد وضعیت HTTP که توسط درخواست بازگردانده می شود متفاوت است. روش RedirectPermanent کد وضعیت HTTP 301 – Moved Permanently را برمی گرداند. این کد وضعیت HTTP نشان می دهد که منبع درخواستی به طور دائم به URL جدیدی که در هدر Location مشخص شده است منتقل شده است.
این وضعیت HTTP 301 – Moved Permanently در زمینه موتورهای جستجو برای ابزارهای مبتنی بر بهینه سازی موتور جستجو و سئو مهم است.
این متد همچنین بخشی از کلاس Controllerbase است بنابراین مستقیماً برای استفاده در کلاس کنترلر در دسترس است و یک URL را به عنوان یک رشته در ورودی می پذیرد.
این روش یک شی RedirectResult با پرچم Permanent=true ایجاد می کند که درخواست را به URL مشخص شده هدایت می کند.
در تکه کد زیر استفاده از روش RedirectPermanent در ASP.NET Core MVC نشان داده شده است.
همانطور که در شکل زیر نشان داده شده است برای درخواست Home/Privacy ، مرورگر کد پاسخ 301 – Moved Permanently را با URL جدید در هدر Location دریافت کرده است. در صورت مواجهه با کد وضعیت 301، مرورگر هدایت مجدد را به URL جدید Policies/PrivacyPolicy انجام میدهند.
روش RedirectPreserveMethod
این روش شبیه Redirect است اما در کد وضعیت HTTP که توسط درخواست بازگردانده شده است متفاوت هستند. همچنین این روش نوع درخواست را حفظ می کند، یعنی از همان روش HTTP (get/post) و بدنه برای تغییر مسیر به URL جدید در هدر Location استفاده می کند. RedirectPreserveMethod کد وضعیت 307 - Temporary Redirectرا برمی گرداند.
این متد همچنین بخشی از کلاس Controllerbase است بنابراین مستقیماً برای استفاده در کلاس کنترلر در دسترس است و یک URL را به عنوان یک رشته در ورودی می پذیرد.
این روش یک شی RedirectResult با پرچم Permanent=false و PreserveMethod=true ایجاد می کند که درخواست را به URL مشخص شده هدایت می کند.
در تکه کد زیر استفاده از روش RedirectPreserveMethod در ASP.NET Core MVC نشان داده شده است.
همانطور که در شکل زیر نشان داده شده است برای درخواست Home/Privacy ، مرورگر کد پاسخ 307 – Temporary Redirect را با URL جدید در هدر Location دریافت کرده است. در صورت مواجهه با کد وضعیت 307، مرورگر هدایت مجدد را به URL جدید Policies/PrivacyPolicy انجام میدهند.
روش RedirectPermanentPreserveMethod
این روش شبیه Redirect است اما در کد وضعیت HTTP که توسط درخواست بازگردانده شده است متفاوت هستند. همچنین این روش نوع درخواست را حفظ می کند، یعنی از همان روش HTTP (get/post) و بدنه برای تغییر مسیر به URL جدید در هدر Location استفاده می کند. . RedirectPreserveMethod کد وضعیت 308 - Redirect Permanentرا برمی گرداند.
این روش یک شی RedirectResult با پرچم Permanent=true و PreserveMethod=true ایجاد می کند که درخواست را به URL مشخص شده هدایت می کند.
در تکه کد زیر استفاده از روش RedirectPermanentPreserveMethod در ASP.NET Core MVC نشان داده شده است.
همانطور که در شکل زیر نشان داده شده است برای درخواست Home/Privacy ، مرورگر کد پاسخ 308 – Redirect Permanent را با URL جدید در هدر Location دریافت کرده است. در صورت مواجهه با کد وضعیت 308، مرورگر هدایت مجدد را به URL جدید Policies/PrivacyPolicy انجام میدهند.
نتیجه گیری
در این مقاله با روش های مختلف موجود برای Redirect و تغییر مسیر درخواست در ASP.NET Core آشنا شدیم. ما 5 روش اصلی Redirect و تغییرات آنها برای تغییر مسیر یک درخواست را بررسی کردیم. شما می توانید بر اساس نیاز خود از این روش ها استفاده کنید و به رفتار دلخواه برسید.
تغییر مسیر و Redirect یک درخواست در ASP.NET Core یک جنبه بسیار مهم است که در اکثر برنامه های ASP.NET Core برای سناریوهای مختلف استفاده می شود.
برای ثبت نظر باید در سایت ثبت نام یا ورود نمایید