ASP.NET MVC中Redirect和RedirectToAction有什么区别?

55
除了返回类型之外,RedirectRedirectToAction有什么区别?我们应该在什么情况下使用它们?提供任何真实生活场景的解释将对我非常有帮助。
我看了一下"Confusion between Redirect and RedirectToAction",但在我看来,答案更多地涉及处理id参数和返回适当的视图。
1个回答

92

RedirectToAction可以让您构建重定向到应用程序中特定操作/控制器的URL,即它会使用路由表来生成正确的URL。

Redirect要求您提供完整的重定向URL。

如果您有一个名为Home的控制器中的Index操作,并且该操作具有Id参数:

  1. 您可以使用RedirectToAction("Index", "Home", new { id = 5 }),它将根据您的路由表为您生成URL。

  2. 您可以使用Redirect,但必须自己构建URL,因此需要传递Redirect("/Home/Index/5")或类似于此的路由表。

  3. 您不能使用RedirectToAction重定向到google.com(外部URL),必须使用Redirect

RedirectToAction旨在进行应用程序内的302重定向,并为您使用路由表提供了更简单的方式。

Redirect旨在进行302重定向到其他所有内容,特别是外部URL,但您仍然可以在应用程序内进行重定向,只需自己构建URL。

最佳实践:对于处理应用程序操作/控制器的任何内容,请使用RedirectToAction。如果您使用Redirect并提供URL,则需要显式修改这些URL,以使其与您的路由表保持一致。


2
这意味着 Redirect 还可以将您带到完全不同的 URL,而 RedirectToAction 仅限于当前应用程序。如果我错了,请纠正我。 - gmail user
3
非常好的答案。感谢您的努力。 - Ehsan Sajjad
2
另一个关键的区别是,RedirectToAction 将 POST 的表单数据发送到下一个操作。如果您 POST 了一个名为 "Name" 值为 "John" 的字段,并且下一个操作正在查找一个名为 "Name" 的字段,则您将在该下一个操作中看到值 "John"。您可以通过运行 TempData.Clear(); 来清除这些 POST 的值。 - John Washam
任何差异都将是微不足道的。如果我们比较应用程序内的重定向和路由之间的区别,RedirectToAction相对于Redirect所需完成的唯一额外工作就是找出路由表,这应该非常快速,因为大部分内容都被缓存了。我总是会使用RedirectToAction,以便在未来更改路由时无需担心破坏现有的重定向。 - Omar
@Omar 如果Index是HTTPGet,我们如何使用RedirectToAction,因为它只会在控制器中查找HttpPost? - John
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接