Как да пренасочите заявка в ASP.NET Core MVC

ASP.NET Core е междуплатформена, отворена, бърза и модулна рамка за изграждане на високопроизводителни уеб приложения. Приложенията на ASP.NET Core MVC ви позволяват да пренасочвате заявка към определен URL по няколко различни начина. Тази статия говори за това как можем да постигнем това с примери за код, където е подходящо.

За да работите с примерите за кодове, предоставени в тази статия, трябва да имате Visual Studio 2019 инсталиран във вашата система. Ако все още нямате копие, можете да изтеглите Visual Studio 2019 тук. 

[Също на: Как да рефакторираме обектите на Бог в C #]

Създайте ASP.NET Core MVC проект в Visual Studio

Първо, нека създадем проект ASP.NET Core в Visual Studio 2019. Ако приемем, че Visual Studio 2019 е инсталиран във вашата система, следвайте стъпките, описани по-долу, за да създадете нов ASP.NET Core проект в Visual Studio.

  1. Стартирайте Visual Studio IDE.
  2. Кликнете върху „Създаване на нов проект“.
  3. В прозореца „Създаване на нов проект“ изберете „ASP.NET Core Web Application“ от показания списък с шаблони.
  4. Щракнете върху Напред.
  5. В прозореца „Конфигуриране на вашия нов проект“ посочете името и местоположението на новия проект.
  6. По избор поставете отметка в квадратчето „Поставяне на решение и проект в една и съща директория“, в зависимост от вашите предпочитания.
  7. Щракнете върху Създаване.
  8. В прозореца „Създаване на ново уеб приложение на ASP.NET Core“, показан по-нататък, изберете .NET Core като време на изпълнение и ASP.NET Core 3.1 (или по-нова версия) от падащия списък в горната част.
  9. Изберете „Уеб приложение (Model-View-Controller)“ като шаблон на проекта, за да създадете ново приложение на ASP.NET Core MVC. 
  10. Уверете се, че квадратчетата „Активиране на поддръжката на Docker“ и „Конфигуриране за HTTPS“ са отметнати, тъй като тук няма да използваме тези функции.
  11. Уверете се, че удостоверяването е настроено на „Без удостоверяване“, тъй като и ние няма да използваме удостоверяване.
  12. Щракнете върху Създаване.

Следвайки тези стъпки ще създадете нов ASP.NET Core MVC проект в Visual Studio 2019. Ще използваме този проект в секциите по-долу, за да илюстрираме как можем да пренасочваме заявки при работа с методи за действие в ASP.NET Core 3.1.

Пренасочващото действие води до ASP.NET Core MVC

В ASP.NET Core MVC има няколко вида резултати от действия, като RedirectResult, RedirectToActionResult, RedirectToRouteResult и LocalRedirectResult. Всички тези класове разширяват класа ActionResult и интерфейсите IActionResult и IKeepTempDataResult и връщат Found (Http Status Code 302), Moved Permanently (Http Status Code 301), Temporary Redirect (Http Status Code 307) или Permanent Redirect (Http Status Code 308 ).

Ще разгледаме как можем да работим с всеки от тях в този раздел.

Използвайте RedirectResult в ASP.NET Core MVC

Можете да използвате всеки от следните методи за връщане на RedirectResult:

  • Пренасочване - Http код за състояние 302 намерен (временно преместен в URL адреса, предоставен в заглавката на местоположението)
  • RedirectPermanent - Http код на състоянието 301 Преместено за постоянно
  • RedirectPermanentPreserveMethod - Http код на състоянието 308 Постоянно пренасочване
  • RedirectPreserveMethod - Http код на състоянието 307 Временно пренасочване

Следващите редове на кода показват как можете да използвате всеки от тези методи.

Пренасочване ("/ Автор / Индекс");
RedirectPermanent ("/ Автор / Индекс");
RedirectPermanentPreserveMethod ("/ Автор / Индекс");
RedirectPreserveMethod ("/ Автор / Индекс");

Като алтернатива можете да върнете екземпляр на RedirectResult, както е показано в кодовия фрагмент, даден по-долу.

публичен индекс на пренасочване ()

{

   връщане на нов RedirectResult (url: "/ Author / Index", permanent: true,

                             saveMethod: true);

}

Имайте предвид, че методът за пренасочване може да се използва за пренасочване на заявка към посочен URL адрес. Този метод е достъпен в абстрактния базов клас, наречен ControllerBase.

публичен индекс на пренасочване ()

{

  return Redirect ("// google.com");

}

Трябва да се отбележи, че контролерите, които създавате в ASP.NET Core MVC, разширяват класа Controller. Този клас от своя страна разширява класа ControllerBase и изпълнява интерфейсите IActionFilter, IFilterMetadata, IAsyncActionFilter и IDisposable.

Използвайте RedirectToActionResult в ASP.NET Core MVC

Този резултат от действието може да се използва за пренасочване към посоченото действие и контролер. Ако не е посочен контролер, той пренасочва към посоченото действие в рамките на текущия контролер. Можете да използвате всеки от следните методи за пренасочване към посоченото действие и връщане на екземпляр на RedirectToActionResult от вашия метод на действие.

  • RedirectToAction - Намерен Http код за състояние 302 (временно преместен в URL адреса, предоставен в заглавката на местоположението)
  • RedirectToActionPermanent - Http код на състоянието 301 Преместено за постоянно
  • RedirectToActionPermanentPreserveMethod - Http код на състоянието 308 Постоянно пренасочване
  • RedirectToActionPreserveMethod - Http код на състоянието 307 Временно пренасочване

Следният кодов фрагмент илюстрира как може да се използва методът RedirectToAction.

публичен индекс RedirectToActionResult ()

{

    връщане RedirectToAction (actionName: "Index", controllerName: "Автор");

}

Можете да пропуснете името на контролера, ако искате да пренасочите заявката към метод на действие в текущия контролер. Следният кодов фрагмент показва как може да се постигне това.

публичен индекс RedirectToActionResult ()

{

   върнете RedirectToAction (actionName: "Поверителност");

}

Използвайте RedirectToRouteResult в ASP.NET Core MVC

Това е още един резултат от действието, който може да се използва за пренасочване на заявката към посочения маршрут. Можете да използвате всеки от следните методи, за да върнете екземпляр на RedirectToRouteResult от вашия метод на действие.

  • RedirectToRoute - Намерен Http код за състояние 302 (временно преместен в URL адреса, предоставен в заглавката на местоположението)
  • RedirectToRoutePermanent - Http код на състоянието 301 Преместено за постоянно
  • RedirectToRoutePermanentPreserveMethod - Http код на състоянието 308 Постоянно пренасочване
  • RedirectToRoutePreserveMethod - Http код на състоянието 307 Временно пренасочване

Следният кодов фрагмент показва как може да се използва методът RedirectToRoute.

публичен индекс RedirectToRouteResult ()

{

    return RedirectToRoute ("автор");

}

Можете също да посочите стойността на маршрута при пренасочване, както е показано в кодовия фрагмент, даден по-долу.

var routeValue = нов RouteValueDictionary

 (ново {действие = "Преглед", контролер = "Автор"});

връщане RedirectToRoute (routeValue);

Използвайте LocalRedirectResult в ASP.NET Core MVC

Този резултат се използва, когато искате да пренасочите към локален URL адрес. Той хвърля InvalidOperationException, ако използвате външен URL адрес с него. Можете да използвате всеки от следните методи, за да върнете екземпляр на LocalRedirectResult от вашия метод на действие.

  • LocalRedirect - Намерен Http код за състояние 302 (временно преместен в URL адреса, предоставен в заглавката на местоположението)
  • LocalRedirectPermanent - Http код на състоянието 301 Преместено за постоянно
  • LocalRedirectPermanentPreserveMethod - Http код на състоянието 308 Постоянно пренасочване
  • LocalRedirectPreserveMethod - Http код на състоянието 307 Временно пренасочване

Пренасочване към бръснарски страници в ASP.NET Core MVC

И накрая, имайте предвид, че можете дори да пренасочвате към бръснарски страници, използвайки метода RedirectToPage, като посочвате целевата бръснарска страница, към която да пренасочите заявката. Методът RedirectToPage връща екземпляр RedirectToPageResult заедно с HTTP код на състоянието 302.

Ако имате страница с име Автор, където искате искането да бъде пренасочено, можете да използвате следния кодов фрагмент.

публичен IActionResult RedirectToAuthorPage ()

{

    return RedirectToPage ("Автор");

}

Как да направите повече в ASP.NET Core:

  • Как да използвам маршрутизиране на атрибути в ASP.NET Core
  • Как да предавам параметри на методи за действие в ASP.NET Core MVC
  • Как да използвам API анализатори в ASP.NET Core
  • Как да използваме маркери за данни за маршрути в ASP.NET Core
  • Как да използвам версирането на API в ASP.NET Core
  • Как да използвам обекти за прехвърляне на данни в ASP.NET Core 3.1
  • Как да се справя с 404 грешки в ASP.NET Core MVC
  • Как да използвам инжектиране на зависимост във филтри за действие в ASP.NET Core 3.1
  • Как да използвам шаблона за опции в ASP.NET Core
  • Как да използвам маршрутизиране на крайни точки в ASP.NET Core 3.0 MVC
  • Как да експортирам данни в Excel в ASP.NET Core 3.0
  • Как да използвам LoggerMessage в ASP.NET Core 3.0
  • Как да изпращате имейли в ASP.NET Core
  • Как да регистрирам данни в SQL Server в ASP.NET Core
  • Как да планирате работни места с помощта на Quartz.NET в ASP.NET Core
  • Как да върнете данни от ASP.NET Core Web API
  • Как да форматирате данните за отговор в ASP.NET Core
  • Как да консумирате ASP.NET Core Web API с помощта на RestSharp
  • Как да извършвате асинхронни операции с помощта на Dapper
  • Как да използваме флагове на функции в ASP.NET Core
  • Как да използвам атрибута FromServices в ASP.NET Core
  • Как да работите с бисквитки в ASP.NET Core
  • Как да работя със статични файлове в ASP.NET Core
  • Как да използвам URL пренаписване на Middleware в ASP.NET Core
  • Как да приложим ограничаване на скоростта в ASP.NET Core
  • Как да използвам Azure Application Insights в ASP.NET Core
  • Използване на разширени функции на NLog в ASP.NET Core
  • Как да се справим с грешки в ASP.NET Web API
  • Как да приложим обработка на глобални изключения в ASP.NET Core MVC
  • Как да се справя с нулеви стойности в ASP.NET Core MVC
  • Разширено създаване на версии в ASP.NET Core Web API
  • Как да работя с услуги за работници в ASP.NET Core
  • Как да използвам API за защита на данните в ASP.NET Core
  • Как да използвам условен мидълуер в ASP.NET Core
  • Как да работите със състоянието на сесията в ASP.NET Core
  • Как да пишете ефективни контролери в ASP.NET Core