Когда использовать RedirectToAction и где использовать RedirectToRouteResult?
Вопрос
В каком контексте я могу использовать RedirectToAction
и где использовать RedirectToRouteResult
?
У меня есть два метода действий, как показано ниже.
Подход - 1
public class ActionResultTypesController : Controller
{
public ActionResult Content()
{
return new RedirectToRouteResult(new RouteValueDictionary(
new { action = "Fileresult", controller = "ActionResultTypes" }));
}
public ActionResult Fileresult()
{
return View();
}
}
Подход - 2
Я мог бы написать такой же код, как показано ниже. Разница лишь в том, что на этот раз я использовал RedirectToAction
на месте RedirectToRouteResult
public class ActionResultTypesController : Controller
{
public ActionResult Content()
{
return RedirectToAction("Fileresult", "ActionResultTypes");
}
public ActionResult Fileresult()
{
return View();
}
}
Обе части кода имеют общий Resultant
3 ответа
При использовании внутри контроллера не так много различий, как в вашем примере.
Оба они в конечном итоге достигают одной и той же цели. Однако RedirectToRouteResult() в основном используется в сценарии типа фильтра действий, который мы здесь видим. Это немного менее дружелюбно для глаз, когда просто используется в ваших действиях с контроллерами.
Оба могут достичь одной и той же цели. Вопросы, которые вам нужно задать себе в большинстве сценариев, действительно:
- Нужен ли постоянный флаг перенаправления при использовании RedirectToRouteResult()?
- Хочу ли я написать дополнительный код при использовании RedirectToRouteResult()?
Если ваш ответ "нет" или я не знаю,
RedirectToAction("Action", "Controller", new { parameter = value });
это, вероятно, ваш лучший выбор!
РЕДАКТИРОВАТЬ:
Вот немного света о том, что RedirectToRouteResult
является.
Ссылка на некоторые перенаправления MVC.
В этом вы заметите, что RedirectToRouteResult
это не то, что вы обычно вызываете, чтобы вернуться в действие. Используется как тип возврата для нескольких RedirectToRoute
звонки. Например, в этой книге вы увидите 2 звонка. RedirectToRoute
а также RedirectToRoutePermanent
,
Они оба возвращаются RedirectToRouteResult
Кроме, RedirectToRoutePermanent
возвращает результат с постоянным перенаправлением bool true
, Это возвращает HTTP 301 status code
,
Надеюсь это поможет!
Я новичок в MVC, но обнаружил, что я использую пользовательский класс Authenticate, и одно из свойств возвращает RedirectToRouteResult. Этот класс не является контроллером (или производным от него), поэтому RedirectToAction недоступен, и я бы использовал RedirectToRouteResult.
Недвижимость выглядит так:
public RedirectToRouteResult NotLoggedInPage
{
get
{
return new RedirectToRouteResult(new RouteValueDictionary(new { action = "LoggedOut", controller = "Login" }));
}
}
Это почти то же самое, но...
что происходит, когда вы работаете с несколькими пользовательскими маршрутами? это альтернатива, которая поддерживает маршруты
при втором подходе вы работаете с маршрутом по умолчанию, но когда вам нужно использовать конкретный маршрут с 3 или 4 параметрами, вы можете использовать первый подход и указанное имя маршрута и со всеми параметрами.
этот тип опций вы можете найти и у помощников, например, на сайте новостной газеты:
у вашего проекта есть два маршрута
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
"NewsRoute", // Route name
"News/{action}/{year}/{month}/{day}/{news}",
new { controller = "News", action = "show", year = 2013, month = 6, news = "start-new" }
);
маршрут по умолчанию, используемый для содержимого и специальных страниц, а также NewsRoute для отображения и редактирования новостей.
если вам нужно создать какой-то URL, вы должны сделать это так
@Url.Action("Home","Contact")
@Url.RouteUrl("NewsRoute", new RouteValueDictionary(new {action = "show", year = 2013, month = 6, news = "title news" }));
и перенаправление это так же