Jak przekierować żądanie w ASP.NET Core MVC

ASP.NET Core to wieloplatformowa, open source, oszczędna, szybka i modułowa struktura do tworzenia wysokowydajnych aplikacji internetowych. Aplikacje ASP.NET Core MVC umożliwiają przekierowanie żądania do określonego adresu URL na kilka różnych sposobów. W tym artykule omówiono, jak możemy to osiągnąć za pomocą przykładów kodu, tam gdzie jest to stosowne.

Aby pracować z przykładami kodu przedstawionymi w tym artykule, w systemie powinien być zainstalowany program Visual Studio 2019. Jeśli nie masz jeszcze kopii, możesz pobrać program Visual Studio 2019 tutaj. 

[Także na: Jak refaktoryzować obiekty Boga w C #]

Utwórz projekt ASP.NET Core MVC w programie Visual Studio

Po pierwsze, utwórzmy projekt ASP.NET Core w programie Visual Studio 2019. Zakładając, że w systemie jest zainstalowany program Visual Studio 2019, wykonaj czynności opisane poniżej, aby utworzyć nowy projekt ASP.NET Core w programie Visual Studio.

  1. Uruchom środowisko IDE programu Visual Studio.
  2. Kliknij „Utwórz nowy projekt”.
  3. W oknie „Utwórz nowy projekt” wybierz „Aplikacja sieci Web ASP.NET Core” z wyświetlonej listy szablonów.
  4. Kliknij Następny.
  5. W oknie „Konfiguruj nowy projekt” określ nazwę i lokalizację nowego projektu.
  6. Opcjonalnie zaznacz pole wyboru „Umieść rozwiązanie i projekt w tym samym katalogu”, w zależności od preferencji.
  7. Kliknij Utwórz.
  8. W wyświetlonym obok oknie „Tworzenie nowej aplikacji sieci Web ASP.NET Core” wybierz .NET Core jako środowisko uruchomieniowe i ASP.NET Core 3.1 (lub nowszy) z listy rozwijanej u góry.
  9. Wybierz „Web Application (Model-View-Controller)” jako szablon projektu, aby utworzyć nową aplikację ASP.NET Core MVC. 
  10. Upewnij się, że pola wyboru „Włącz obsługę Dockera” i „Konfiguruj dla HTTPS” są odznaczone, ponieważ nie będziemy tutaj używać tych funkcji.
  11. Upewnij się, że uwierzytelnianie jest ustawione na „Brak uwierzytelniania”, ponieważ również nie będziemy używać uwierzytelniania.
  12. Kliknij Utwórz.

Wykonanie tych kroków spowoduje utworzenie nowego projektu ASP.NET Core MVC w programie Visual Studio 2019. Użyjemy tego projektu w poniższych sekcjach, aby zilustrować, jak możemy przekierowywać żądania podczas pracy z metodami akcji w ASP.NET Core 3.1.

Wyniki akcji przekierowania w ASP.NET Core MVC

Istnieje kilka typów wyników akcji w ASP.NET Core MVC, takich jak RedirectResult, RedirectToActionResult, RedirectToRouteResult i LocalRedirectResult. Wszystkie te klasy rozszerzają klasę ActionResult oraz interfejsy IActionResult i IKeepTempDataResult i zwracają Found (kod stanu HTTP 302), przeniesione na stałe (kod stanu Http 301), przekierowanie tymczasowe (kod stanu HTTP 307) lub przekierowanie stałe (kod stanu HTTP 308 ).

W tej sekcji zbadamy, jak możemy pracować z każdym z nich.

Użyj RedirectResult w ASP.NET Core MVC

Aby zwrócić RedirectResult, możesz użyć dowolnej z następujących metod:

  • Przekierowanie - znaleziono kod stanu HTTP 302 (tymczasowo przeniesiono do adresu URL podanego w nagłówku lokalizacji)
  • RedirectPermanent - Kod stanu HTTP 301 przeniesiony na stałe
  • RedirectPermanentPreserveMethod - kod stanu HTTP 308 stałe przekierowanie
  • RedirectPreserveMethod - tymczasowe przekierowanie 307 kodu stanu HTTP

Poniższe wiersze kodu pokazują, jak można użyć każdej z tych metod.

Przekierowanie („/ Autor / Indeks”);
RedirectPermanent ("/ Autor / Indeks");
RedirectPermanentPreserveMethod ("/ Autor / Indeks");
RedirectPreserveMethod ("/ Autor / Indeks");

Alternatywnie możesz zwrócić wystąpienie RedirectResult, jak pokazano we fragmencie kodu podanym poniżej.

public RedirectResult Index ()

{

   return new RedirectResult (url: "/ Author / Index", permanent: true,

                             preserveMethod: true);

}

Należy zauważyć, że metoda Redirect może służyć do przekierowania żądania do określonego adresu URL. Ta metoda jest dostępna w abstrakcyjnej klasie bazowej o nazwie ControllerBase.

public RedirectResult Index ()

{

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

}

Należy zauważyć, że kontrolery utworzone w ASP.NET Core MVC rozszerzają klasę Controller. Ta klasa z kolei rozszerza klasę ControllerBase i implementuje interfejsy IActionFilter, IFilterMetadata, IAsyncActionFilter i IDisposable.

Użyj RedirectToActionResult w ASP.NET Core MVC

Ten wynik akcji może służyć do przekierowania do określonej akcji i kontrolera. Jeśli nie określono kontrolera, następuje przekierowanie do określonej akcji w ramach bieżącego kontrolera. Możesz użyć dowolnej z następujących metod, aby przekierować do określonej akcji i zwrócić wystąpienie RedirectToActionResult z metody akcji.

  • RedirectToAction - Znaleziono kod stanu HTTP 302 (tymczasowo przeniesiono do adresu URL podanego w nagłówku lokalizacji)
  • RedirectToActionPermanent - Kod stanu HTTP 301 przeniesiony na stałe
  • RedirectToActionPermanentPreserveMethod - Kod stanu HTTP 308 Stałe przekierowanie
  • RedirectToActionPreserveMethod - tymczasowe przekierowanie 307 kodu stanu HTTP

Poniższy fragment kodu ilustruje sposób użycia metody RedirectToAction.

public RedirectToActionResult Index ()

{

    return RedirectToAction (actionName: "Index", controllerName: "Author");

}

Możesz pominąć nazwę kontrolera, jeśli chcesz przekierować żądanie do metody akcji w bieżącym kontrolerze. Poniższy fragment kodu pokazuje, jak można to osiągnąć.

public RedirectToActionResult Index ()

{

   return RedirectToAction (actionName: "Prywatność");

}

Użyj RedirectToRouteResult w ASP.NET Core MVC

Jest to kolejny wynik akcji, którego można użyć do przekierowania żądania na określoną trasę. Możesz użyć dowolnej z następujących metod, aby zwrócić wystąpienie RedirectToRouteResult z metody akcji.

  • RedirectToRoute - Znaleziono kod stanu HTTP 302 (tymczasowo przeniesiono do adresu URL podanego w nagłówku lokalizacji)
  • RedirectToRoutePermanent - kod stanu HTTP 301 przeniesiony na stałe
  • RedirectToRoutePermanentPreserveMethod - Kod stanu HTTP 308 Stałe przekierowanie
  • RedirectToRoutePreserveMethod - tymczasowe przekierowanie 307 kodu stanu HTTP

Poniższy fragment kodu pokazuje, jak można użyć metody RedirectToRoute.

public RedirectToRouteResult Index ()

{

    return RedirectToRoute ("autor");

}

Możesz również określić wartość trasy podczas przekierowywania, jak pokazano we fragmencie kodu podanym poniżej.

var routeValue = new RouteValueDictionary

 (nowe {akcja = "Widok", kontroler = "Autor"});

return RedirectToRoute (routeValue);

Użyj LocalRedirectResult w ASP.NET Core MVC

Ten wynik akcji jest używany, gdy chcesz przekierować do lokalnego adresu URL. Zgłasza InvalidOperationException, jeśli używasz z nim zewnętrznego adresu URL. Możesz użyć dowolnej z następujących metod, aby zwrócić wystąpienie LocalRedirectResult z metody akcji.

  • LocalRedirect - Znaleziono kod stanu Http 302 (tymczasowo przeniesiono do adresu URL podanego w nagłówku lokalizacji)
  • LocalRedirectPermanent - kod stanu HTTP 301 przeniesiony na stałe
  • LocalRedirectPermanentPreserveMethod - kod stanu HTTP 308 stałe przekierowanie
  • LocalRedirectPreserveMethod - tymczasowe przekierowanie 307 kodu stanu HTTP

Przekieruj do stron razor w ASP.NET Core MVC

Na koniec zwróć uwagę, że możesz nawet przekierować do stron maszynki do golenia przy użyciu metody RedirectToPage, określając docelową stronę maszynki do golenia, do której ma zostać przekierowane żądanie. Metoda RedirectToPage zwraca wystąpienie RedirectToPageResult wraz z kodem stanu HTTP 302.

Jeśli masz stronę o nazwie Autor, na którą chcesz przekierować żądanie, możesz użyć następującego fragmentu kodu.

public IActionResult RedirectToAuthorPage ()

{

    return RedirectToPage ("Autor");

}

Jak zrobić więcej w ASP.NET Core:

  • Jak używać routingu atrybutów w ASP.NET Core
  • Jak przekazać parametry do metod akcji w ASP.NET Core MVC
  • Jak używać analizatorów API w ASP.NET Core
  • Jak używać tokenów danych trasy w ASP.NET Core
  • Jak korzystać z obsługi wersji interfejsu API w ASP.NET Core
  • Jak używać obiektów transferu danych w ASP.NET Core 3.1
  • Jak obsługiwać błędy 404 w ASP.NET Core MVC
  • Jak używać iniekcji zależności w filtrach akcji w ASP.NET Core 3.1
  • Jak używać wzorca opcji w ASP.NET Core
  • Jak używać routingu punktów końcowych w ASP.NET Core 3,0 MVC
  • Jak wyeksportować dane do programu Excel w ASP.NET Core 3,0
  • Jak używać LoggerMessage w ASP.NET Core 3,0
  • Jak wysyłać wiadomości e-mail w ASP.NET Core
  • Jak rejestrować dane w programie SQL Server w ASP.NET Core
  • Jak planować zadania przy użyciu Quartz.NET w ASP.NET Core
  • Jak zwrócić dane z ASP.NET Core Web API
  • Jak sformatować dane odpowiedzi w ASP.NET Core
  • Jak korzystać z ASP.NET Core Web API przy użyciu RestSharp
  • Jak wykonywać operacje asynchroniczne przy użyciu Dapper
  • Jak używać flag funkcji w ASP.NET Core
  • Jak używać atrybutu FromServices w ASP.NET Core
  • Jak pracować z plikami cookie w ASP.NET Core
  • Jak pracować z plikami statycznymi w ASP.NET Core
  • Jak używać oprogramowania pośredniczącego ponownego zapisywania adresów URL w ASP.NET Core
  • Jak zaimplementować ograniczanie szybkości w ASP.NET Core
  • Jak używać usługi Azure Application Insights w ASP.NET Core
  • Korzystanie z zaawansowanych funkcji NLog w ASP.NET Core
  • Jak obsługiwać błędy w ASP.NET Web API
  • Jak zaimplementować globalną obsługę wyjątków w ASP.NET Core MVC
  • Jak obsługiwać wartości null w ASP.NET Core MVC
  • Zaawansowane przechowywanie wersji w ASP.NET Core Web API
  • Jak pracować z usługami roboczymi w ASP.NET Core
  • Jak używać interfejsu API ochrony danych w ASP.NET Core
  • Jak używać warunkowego oprogramowania pośredniczącego w ASP.NET Core
  • Jak pracować ze stanem sesji w ASP.NET Core
  • Jak pisać wydajne kontrolery w ASP.NET Core