这是我家控制器的默认索引功能
public ActionResult Index()
{
if (User.Identity.IsAuthenticated)
{
return NewPosts();
}
else
{
ViewBag.Message = "Welcome!";
return View();
}
}
这是同一个家庭控制器文件中的newposts函数
public ActionResult NewPosts()
{
return View();
}
我已登录我的帐户并关闭浏览器。然后我重新打开它访问相同的索引页面,我看到我的身份(欢迎myusername)但没有调用newposts函数,因此它不会按预期显示newposts视图。
为什么?我该如何解决这个问题?
谢谢。
答案 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();
}