Подтвердить что ты не робот

Когда использовать 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();
    }
}

Оба куска кода имеют общий результирующий

4b9b3361

Ответ 1

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

Оба они в конечном итоге достигают той же цели. Однако RedirectToRouteResult() в основном используется в сценарии типа фильтра действий который показан здесь. Он немного менее дружелюбен по отношению к глазам при использовании только в ваших действиях на контроллерах.

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

  • Нужен ли мне постоянный флаг перенаправления при использовании RedirectToRouteResult()?
  • Нужно ли писать дополнительный код при использовании RedirectToRouteResult()?

Если ваш ответ отрицательный или я не знаю,

RedirectToAction("Action", "Controller", new { parameter = value });

вероятно, лучший выбор!

EDIT:

Здесь немного света, на котором RedirectToRouteResult.

Ссылка на некоторые перенаправления MVC.

В этом вы заметите, что RedirectToRouteResult - это не то, что вы обычно вызываете для возврата в действие. Он используется как тип возврата для нескольких вызовов RedirectToRoute. Например, есть 2 вызова, которые вы увидите в этой книге. RedirectToRoute и RedirectToRoutePermanent.

Оба они возвращают RedirectToRouteResult, кроме того, RedirectToRoutePermanent возвращает результат с постоянной переадресацией bool true. Это возвращает a HTTP 301 status code.

Надеюсь, это поможет!

Ответ 2

Я новичок в MVC, но обнаружил, что я использую собственный класс Authenticate, и одно из свойств возвращает RedirectToRouteResult. Этот класс не является контроллером (или полученным из него), поэтому RedirectToAction недоступен, и я бы использовал RedirectToRouteResult.

Свойство выглядит следующим образом:

    public RedirectToRouteResult NotLoggedInPage
    {
        get
        {
            return new RedirectToRouteResult(new RouteValueDictionary(new { action = "LoggedOut", controller = "Login" }));
        }
    }

Ответ 3

Это почти то же самое, но... что происходит, когда вы работаете с несколькими пользовательскими маршрутами? это альтернатива, которая поддерживает маршруты

со вторым подходом, который вы работаете с маршрутом по умолчанию, но когда вам нужно использовать определенный маршрут с 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" }));

и перенаправить его таким же образом