我为什么要使用RedirectToAction?

时间:2012-06-19 14:20:58

标签: c# asp.net asp.net-mvc

之间有什么区别:

public ActionResult logOff()
{
    FormsAuth.SignOut();
    return RedirectToAction("index", "Home");
}

public ActionResult logOff()
{
    FormsAuth.SignOut();
    return index();
}

2 个答案:

答案 0 :(得分:8)

使用RedirectToAction(),您的用户将被重定向到索引页面(这是他们在浏览器地址栏中看到的内容)。只需返回index()方法的结果,即可将当前页面(LogOff?)填入另一页的内容。

在这种情况下,可能没有区别,但如果您的操作执行某些逻辑,那么当用户只是刷新页面时,您可能会遇到问题。

答案 1 :(得分:1)

查看Post/Redirect/Get Pattern

  

当通过HTTP POST请求将Web表单提交给服务器时,   尝试在某些情况下刷新服务器响应的Web用户   用户代理可以导致原始HTTP POST请求的内容   要重新提交,可能会导致意外结果,例如a   重复网页购买。为避免此问题,许多Web开发人员使用   PRG模式1 - 而不是直接返回网页,   POST操作返回重定向命令。 HTTP 1.1   规范引入了HTTP 303响应代码以确保在   在这种情况下,Web用户的浏览器可以安全地刷新服务器   响应而不会导致初始HTTP POST请求   重新提交。然而,目前使用的最常见的商业应用   (新旧相似)仍然继续发布HTTP 302响应   这些情况。通常避免使用HTTP 301,因为   符合HTTP-1.1标准的浏览器之后不会将方法转换为GET   接收HTTP 301,这通常用于HTTP 302. [2]然而,   在不希望POST的情况下,HTTP 301可能是优选的   要转换为GET参数的参数,因此记录在中   日志。 PRG模式无法解决重复表单的每个场景   提交。一些已知的重复表单提交,PRG不能   解决方法是:如果Web用户在初始提交之前刷新   由于服务器延迟而完成,导致重复的HTTP POST   请求某些用户代理。

这是在asp.net mvc中将重定向模式与HTTP帖子一起使用时最常见的情况之一。