Книга: ASP.NET MVC Framework
RedirectResult и RedirectToRouteResult
RedirectResult и RedirectToRouteResult
Важным свойством MVC Framework является возможность перенаправлять запрос на другие действия контроллеров либо другие URL-адреса. Для этого в MVC встроены механизмы RedirectResult
и RedirectToRouteResult
, которые наследуют от ActionResult
и являются допустимыми результатами работы любого действия.
RedirectResult
предназначен для того, чтобы возвратить результат пользователю в виде перенаправления на заданный адрес URL. У RedirectResult
есть только одно свойство, которое инициализируется через конструктор, — Url
, оно указывает строку адреса, на которую будет перенаправлен пользователь в ответ на запрос. Контроллеры MVC содержат стандартный метод Redirect
, который формирует ответ в виде RedirectResult
. В следующем фрагменте приведено действие, результатом которого является перенаправление пользователя на сайт http://www.asp.net/mvc/:
public ActionResult GetAspNetSite()
выполняет схожую по смыслу с
{
return Redirect("http://www.asp.net/mvc/");
}
RedirectToRouteResultRedirectResult
логику, но перенаправление вызова RedirectToRouteResult
производится только на основании маршрутов таблицы маршрутизации. RedirectToRouteResult
имеет два конструктора, с разным числом параметров, всего параметров два:
? routeName
— указывает наименование маршрута, на который нужно выполнить перенаправление запроса;
? routeValues
— указывает набор значений параметров маршрута типа RouteValueDictionary
, с помощью которых производится поиск маршрута и выполняется перенаправление.
Для упрощения работы с RedirectToRouteResult
механизм MVC реализует для контроллеров, наряду с методами RedirectToRoute
, набор стандартных методов RedirectToAction
, которые призваны облегчить формирование перенаправления вызова на другие действия или контроллеры. Например, следующий фрагмент кода перенаправляет вызов из текущего действия в действие Index
текущего контроллера:
return RedirectToAction("Index");
При использовании RedirectToAction
можно указывать и контроллер, в который требуется перенаправить вызов, кроме того, можно указать набор значений параметров маршрута типа RouteValueDictionary
. Следующий пример кода перенаправит вызов на действие Index
контроллера AccountController
:
return RedirectToAction("Index", "Account");