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

时间:2013-06-05 16:46:56

标签: 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();
    }
}

方法 - 2

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

public class ActionResultTypesController : Controller
{
    public ActionResult Content()
    {
        return RedirectToAction("Fileresult", "ActionResultTypes");
    }
    public ActionResult Fileresult()
    {
        return View();
    }
}

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

3 个答案:

答案 0 :(得分:13)

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

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

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

  1. 使用RedirectToRouteResult()时是否需要永久重定向标志?
  2. 使用RedirectToRouteResult()时是否要编写额外的代码?
  3. 如果您的答案是否定的或我不知道,

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

    可能是你最好的选择!

    修改

    以下是RedirectToRouteResult的内容。

    Reference to some MVC Redirects.

    在此,您会注意到RedirectToRouteResult不是您通常会在动作中返回的内容。它用作多个RedirectToRoute调用的返回类型。例如,您将在该书中看到2个电话。 RedirectToRouteRedirectToRoutePermanent

    他们都返回RedirectToRouteResult,但RedirectToRoutePermanent返回永久重定向bool true的结果。这会返回HTTP 301 status code

    希望这有帮助!

答案 1 :(得分:5)

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

该属性如下所示:

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

答案 2 :(得分:0)

它几乎相同但是......
使用一些自定义路线时会发生什么?是支持路线的替代方案

使用第二种方法使用默认路由,但是当您需要使用具有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.Action("Home","Contact")

@Url.RouteUrl("NewsRoute", new RouteValueDictionary(new {action = "show", year = 2013, month = 6, news = "title news" }));

并以相同的方式重定向