Когда использовать 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() в основном используется в сценарии типа фильтра действий, который мы здесь видим. Это немного менее дружелюбно для глаз, когда просто используется в ваших действиях с контроллерами.

Оба могут достичь одной и той же цели. Вопросы, которые вам нужно задать себе в большинстве сценариев, действительно:

  1. Нужен ли постоянный флаг перенаправления при использовании RedirectToRouteResult()?
  2. Хочу ли я написать дополнительный код при использовании 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" }));

и перенаправление это так же

Другие вопросы по тегам