何时使用RedirectToAction以及在何处使用RedirectToRouteResult?

eve*_*ffv 29 asp.net-mvc asp.net-mvc-4

在哪种情况下,我可以使用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();
    }
}
Run Code Online (Sandbox Code Playgroud)

方法 - 2

我也可以像下面那样编写相同的代码.唯一的区别是这次我用来RedirectToAction代替RedirectToRouteResult

public class ActionResultTypesController : Controller
{
    public ActionResult Content()
    {
        return RedirectToAction("Fileresult", "ActionResultTypes");
    }
    public ActionResult Fileresult()
    {
        return View();
    }
}
Run Code Online (Sandbox Code Playgroud)

这两段代码都有共同的结果

tec*_*osh 13

在您的示例中使用控制器时,两者之间没有太大区别.

他们最终都达到了同样的目标.但是,RedirectToRouteResult()主要用于此处显示的动作过滤器类型场景.只需在控制器上使用操作时,它的眼睛就不那么友好了.

两者都可以达到同样的目标.在大多数情况下,您需要问自己的问题是:

  1. 使用RedirectToRouteResult()时是否需要永久重定向标志?
  2. 使用RedirectToRouteResult()时是否要编写额外的代码?

如果你的答案是否定的或我不知道,

RedirectToAction("Action", "Controller", new { parameter = value });
Run Code Online (Sandbox Code Playgroud)

可能是你最好的选择!

编辑:

这里有一些关于什么的亮点RedirectToRouteResult.

参考一些MVC重定向.

在这里你会注意到RedirectToRouteResult你通常不会在一个动作中回复.它用作多次RedirectToRoute调用的返回类型.例如,您将在该书中看到2个电话.RedirectToRouteRedirectToRoutePermanent.

它们都返回,RedirectToRouteResult除了,RedirectToRoutePermanent返回永久重定向bool的结果true.这会返回一个HTTP 301 status code.

希望这可以帮助!


小智 6

我是MVC的新手,但是发现我正在使用自定义类Authenticate,并且其中一个属性返回RedirectToRouteResult。此类不是控制器(或从其派生),所以RedirectToAction不可用,我将使用RedirectToRouteResult。

该属性如下所示:

    public RedirectToRouteResult NotLoggedInPage
    {
        get
        {
            return new RedirectToRouteResult(new RouteValueDictionary(new { action = "LoggedOut", controller = "Login" }));
        }
    }
Run Code Online (Sandbox Code Playgroud)