RedirectToaction和方法调用

时间:2012-07-15 14:12:14

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

这是我家控制器的默认索引功能

public ActionResult Index()
{
    if (User.Identity.IsAuthenticated)
    {
        return NewPosts();
    }
    else
    {
        ViewBag.Message = "Welcome!";
        return View();
    }
}

这是同一个家庭控制器文件中的newposts函数

public ActionResult NewPosts()
{
    return View();
}

我已登录我的帐户并关闭浏览器。然后我重新打开它访问相同的索引页面,我看到我的身份(欢迎myusername)但没有调用newposts函数,因此它不会按预期显示newposts视图。

为什么?我该如何解决这个问题?

谢谢。

2 个答案:

答案 0 :(得分:0)

我认为更好的方法是通过web.config为网站设置默认页面为“NewPosts”。然后在您的web.config中,您可以将失败的登录页面设置为“索引”。这将导致用户登录后将其发送到“NewPosts”页面。如果他们关闭浏览器(并且他们的身份验证cookie尚未过期),那么他们也将被发送到“NewPosts”页面。如果他们没有登录,那么他们将被踢到“索引”页面。您的索引操作方法中的if语句将不再需要,因为Web配置表单身份验证会以更强大的方式为您完成此操作。以下是Web配置的示例:

<authentication mode="Forms"> 
      <forms loginUrl="~/Home/Index" timeout="2880" defaultUrl="~/Home/NewPosts" > 
      </forms> 
</authentication>

有关表单身份验证的更多web.config信息,请参阅here

答案 1 :(得分:0)

问题不在于控制器,而在于缓存浏览器。

如果您在第一页上按Ctrl + F5,它应该会将您识别为未经授权。

我知道这不是强制网站访问者按Ctrl + F5刷新浏览器的真正解决方案。互联网上有很多文章要解决这种缓存行为,为他们搜索。

关于您的代码的两个要点:

1-将return NewPosts();更改为:

 RedirectToAction("NewPost");

2- Decoreacte NewPosts方法,带[Authorize]属性:

[Authorize]
public ActionResult NewPosts()
{
    return View();
}