37

问题

在哪种情况下,我可以使用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

4

3 回答 3

17

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

他们最终都达到了相同的目标。但是,RedirectToRouteResult() 主要用于此处看到的操作过滤器类型场景。仅在控制器上的操作中使用时,它对眼睛的友好度有所降低。

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

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

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

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

可能是你最好的选择!

编辑:

这里有一些关于什么RedirectToRouteResult是光。

参考一些 MVC 重定向。

在此,您会注意到这RedirectToRouteResult不是您通常会在操作中调用以返回的东西。它用作多个RedirectToRoute调用的返回类型。例如,您将在那本书中看到 2 个电话。RedirectToRouteRedirectToRoutePermanent

它们都返回RedirectToRouteResultexcept,RedirectToRoutePermanent返回带有永久重定向 bool 的结果true。这会返回一个HTTP 301 status code.

希望这可以帮助!

于 2013-06-05T20:02:52.873 回答
5

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

该属性如下所示:

    public RedirectToRouteResult NotLoggedInPage
    {
        get
        {
            return new RedirectToRouteResult(new RouteValueDictionary(new { action = "LoggedOut", controller = "Login" }));
        }
    }
于 2015-02-03T10:28:59.570 回答
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" }));

和重定向它是相同的方式

于 2013-06-05T17:19:25.653 回答