当我以用户身份登录并在地址栏中输入url http://localhost:50562/Home/Index
时,浏览器会将我带到登录页面,这是我的主页,但有趣的是消息“欢迎,用户!”和Logout链接仍在右上角。当我点击导航栏中的其他链接时,会话继续正常,这意味着,我从未注销过。
当我在登录时访问Home控制器时,有人可以告诉我如何配置路由引擎将我带到另一个页面吗?
答案 0 :(得分:1)
您可以通过在帐户控制器中修改登录的POST方法来实现此目的(假设您使用的是MVC 4及其使用的简单成员资格)。
// POST: /Account/Login
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Login(LoginModel model, string returnUrl)
{
if (ModelState.IsValid && WebSecurity.Login(model.UserName, model.Password, persistCookie: model.RememberMe))
{
return RedirectToLocal(returnUrl);
}
...
}
您可以通过几种方式设置路由。
答案 1 :(得分:1)
您所描述的内容是因为在重定向到主页后才会读取用户cookie。当用户可以在不同页面上输入时,初始化会员提供者的最佳方法是使用全局过滤器。
您可以在App_Start文件夹的FilterConfig类的RegisterGlobalFilters方法中为SimpleMembership提供程序添加此功能
filters.Add(new YourAppNameSpace.Filters.InitializeSimpleMembershipAttribute());
使用过滤器可以让您不必在控制器类中重复使用装饰器。很容易忽略添加装饰器,当它们不存在时,您的站点将出现意外错误。
答案 2 :(得分:0)
感谢您的回答,但似乎该项目一直有SessionObject
类,由控制器处理。我不是该项目的原作者,所以我花了一段时间才弄明白。我的任务是给它一些额外的功能和错误修正。
我遇到了方法:
#region getSessionObject()
protected SessionObject getSessionObject() {
SessionObject loReturnValue = null;
if (Session[SessionObject.SESSION_CONSTANT] != null)
loReturnValue = (SessionObject) Session[SessionObject.SESSION_CONSTANT];
return loReturnValue;
}
我需要在我的家庭控制器的索引操作中调用以检查用户是否已登录。