0

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

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

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

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

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

这是为什么 ?我怎样才能解决这个问题 ?

谢谢你。

4

2 回答 2

0

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

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

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

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

1-更改return NewPosts();为:

 RedirectToAction("NewPost");

2- 使用 [Authorize] 属性装饰 NewPosts 方法:

[Authorize]
public ActionResult NewPosts()
{
    return View();
}
于 2012-07-15T17:08:50.533 回答
0

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

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

有关表单身份验证的更多 web.config 信息,请参见此处

于 2012-07-15T14:35:47.050 回答