Содержание
Для переадресации клиента в ASP.NET Core MVC предусмотрено достаточно большое количество методов, каждый из которых принимает различное количество параметров и возвращает определенные статусные коды HTTP. Разберемся с работой этими методами и объектами, которые выполняют переадресацию клиента.
Класс LocalRedirectResult
LocalRedirectResult
осуществляет переадресацию на локальный адрес. Класс LocalRedirectResult
возвращается рядом методов, содержащихся в классе Controller
:
public virtual LocalRedirectResult LocalRedirect (string localUrl); |
|
public virtual LocalRedirectResult LocalRedirectPermanent (string localUrl); |
|
public virtual LocalRedirectResult LocalRedirectPermanentPreserveMethod (string localUrl); |
|
public virtual LocalRedirectResult LocalRedirectPreserveMethod (string localUrl); |
В зависимости от того, какой метод будет выбран, клиенту будет отправлен определенный код статуса (см. коды статуса в обзоре), например, LocalRedirect()
вернет код статуса 302, а LocalRedirectPermanentPreserveMethod()
— код статуса 308. При этом, все эти методы принимают в качестве параметра локальный адрес для перенаправления.
Например, создадим новое приложение ASP.NET Core MVC и определим в контроллере HomeController
следующее действие:
public IActionResult RedirectToLocalAddress(string address) { return LocalRedirect(address); }
здесь переадресация происходит на адрес, указанный в строке запроса, например
https://localhost:7212/Home/RedirectToLocalAddress?address=~/home/privacy
в этом случае мы будем перенаправлены на страницу Privacy, которая имеется в шаблоне приложения ASP.NET Core MVC:
Если нам необходимо выполнить постоянную переадресацию клиента на новый адрес, то необходимо использовать методы LocalRedirectPermanent()
или LocalRedirectPermanentPreserveMethod()
, но, при этом стоит учитывать, что после такого перенаправления, чтобы корректно осуществлялась дальнейшая отладка приложения, необходимо будет периодически чистить кэш браузера.
Класс RedirectResult
Класс RedirectResult
осуществляет переадресацию на внешний адрес и создается следующими методами класса Controller()
public virtual RedirectResult Redirect (string url); |
|
public virtual RedirectResult RedirectPermanent (string url); |
|
public virtual RedirectResult RedirectPermanentPreserveMethod (string url); |
|
public virtual RedirectResult RedirectPreserveMethod (string url); |
Например,
public IActionResult FindInGoogle(string search) { return Redirect($"https://google.ru?q={search}"); }
таким образом, при переходе на адрес https://localhost:7212/Home/findingoogle?search=[строка]
нас должно перенаправить на главную страницу Google с заданной строкой поиска. Например,
Класс RedirectToRouteResult
Класс RedirectToRouteResult
осуществляет перенаправление на указанный маршрут и создается следующими методами класса Controller
:
public virtual RedirectToRouteResult RedirectToRoute (object? routeValues); |
|
public virtual RedirectToRouteResult RedirectToRoute (string? routeName); |
|
public virtual RedirectToRouteResult RedirectToRoute (string? routeName, object? routeValues); |
|
public virtual RedirectToRouteResult RedirectToRoute (string? routeName, string? fragment); |
|
public virtual RedirectToRouteResult RedirectToRoutePermanent (string? routeName, object? routeValues, string? fragment); |
|
public virtual RedirectToRouteResult RedirectToRoutePermanent (string? routeName, string? fragment); |
|
public virtual RedirectToRouteResult RedirectToRoutePermanent (object? routeValues); |
|
public virtual RedirectToRouteResult RedirectToRoutePermanent (string? routeName); |
|
public virtual RedirectToRouteResult RedirectToRoutePermanentPreserveMethod (string? routeName = default, object? routeValues = default, string? fragment = default); |
|
public virtual RedirectToRouteResult RedirectToRoutePreserveMethod (string? routeName = default, object? routeValues = default, string? fragment = default); |
Чтобы продемонстрировать работу этих методов, создадим новый маршрут для нашего приложения. Для этого откроем класс Program приложения и добавим перед строками:
app.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}");
следующие строки:
//новый маршрут app.MapControllerRoute( name: "blog", pattern: "blog/{controller=Home}/{action=BlogPage}/{id?}");
а также добавим новое действие в контроллер HomeController
public IActionResult BlogPage([FromRoute] string id) { return Content($"Страница блога {id}"); }
таким образом, если будет задан последний параметр маршрута, то в браузере мы будем видеть строку «Страница блога [id]» при переходе по адресу localhost:7212/blog/home/blogpage/
. Например,
Теперь попробуем перенаправить на этот маршрут пользователя. Перепишем действие Index
контроллера HomeController
следующим образом:
public IActionResult Index() { return RedirectToRoute("blog", new { action="BlogPage", id="25"}); }
здесь мы указали в первом параметре название маршрута, а во втором — объект, содержащий параметры маршрута — action
и id
. Если теперь запустить приложение, то мы сразу увидим результат перенаправления:
Если необходимо вставить в путь перенаправления фрагмент, то можно воспользоваться следующей версией метода:
public IActionResult Index() { return RedirectToRoute("blog", new { action="BlogPage", id="25"}, "fragment"); }
В этом случае результат перенаправления будет следующий:
Класс RedirectToActionResult
Класс RedirectToActionResult
осуществляет перенаправление клиента на заданное действие контроллера и создается следующими методами контроллера Controller
:
public virtual RedirectToActionResult RedirectToAction (); |
|
public virtual RedirectToActionResult RedirectToAction (string? actionName); |
|
public virtual RedirectToActionResult RedirectToAction (string? actionName, object? routeValues); |
|
public virtual RedirectToActionResult RedirectToAction (string? actionName, string? controllerName); |
|
public virtual RedirectToActionResult RedirectToAction (string? actionName, string? controllerName, object? routeValues); |
|
public virtual RedirectToActionResult RedirectToAction (string? actionName, string? controllerName, string? fragment); |
|
public virtual RedirectToActionResult RedirectToAction (string? actionName, string? controllerName, object? routeValues, string? fragment);
|
|
RedirectToActionPermanent() c параметрами, как у методов выше |
|
public virtual RedirectToActionResult RedirectToActionPermanentPreserveMethod (string? actionName = default, string? controllerName = default, object? routeValues = default, string? fragment = default); |
|
public virtual RedirectToActionResult RedirectToActionPreserveMethod (string? actionName = default, string? controllerName = default, object? routeValues = default, string? fragment = default); |
Например, решим задачу по перенаправлению клиента на страницу блога (см. выше) с помощью одной из версий метода RedirectToAction()
:
public IActionResult Index() { return RedirectToAction("BlogPage", new { id = 25 }); }
результат перенаправления:
Итого
В ASP.NET Core MVC перенаправление может происходить на локальный адрес, внешний адрес, определенный маршрут, определенное действие контроллера. При этом мы можем устанавливать временную или постоянную переадресацию.