1

当我以用户身份登录并url http://localhost:50562/Home/Index在地址栏中输入 时,浏览器会将我带到登录页面,这是我的主页,但有趣的是消息“欢迎,用户!” 和注销链接仍然在右上角。当我单击导航栏中的其他链接时,会话正常继续,这意味着我从未退出过。

当我在登录时访问 Home 控制器时,有人可以告诉我如何配置路由引擎以将我带到另一个页面吗?

4

3 回答 3

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. return RedirectToAction("Profile", "Home"); ... 其中 Profile 是控制器
  2. 返回视图(returnUrl);...您在方法中设置和分配变量的位置
  3. 或使用 RedirectToLocal(returnUrl) 保留如上;

祝你好运。

于 2013-10-18T10:34:17.173 回答
1

您所描述的发生是因为在启动重定向到主页之后才读取用户cookie。当用户可能进入不同的页面时,初始化您的会员提供者的最佳方式是使用全局过滤器。

您可以在 App_Start 文件夹中 FilterConfig 类的 RegisterGlobalFilters 方法中为 SimpleMembership 提供程序添加此功能

filters.Add(new YourAppNameSpace.Filters.InitializeSimpleMembershipAttribute());

使用过滤器使您不必在控制器类中重复使用装饰器。添加装饰器很容易被忽略,当它们不存在时,您的网站将出现意想不到的错误。

于 2013-10-18T11:27:04.597 回答
0

感谢您的回答,但似乎该项目一直有一个SessionObject类,由控制器处理。我不是该项目的原作者,所以我花了一段时间才弄清楚。我的任务是给它一些额外的功能和错误修正。

我遇到了这个方法:

#region getSessionObject()
    protected SessionObject getSessionObject() {
        SessionObject loReturnValue = null;

        if (Session[SessionObject.SESSION_CONSTANT] != null)
            loReturnValue = (SessionObject) Session[SessionObject.SESSION_CONSTANT];

        return loReturnValue;
    }

我只需要调用我的家庭控制器的索引操作来检查用户是否登录。

于 2013-10-18T12:48:41.743 回答