即使我已登录,当我访问家庭控制器时,我的ASP.NET MVC应用程序也会将我带回登录页面

时间:2013-10-18 10:19:24

标签: asp.net-mvc session

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

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

3 个答案:

答案 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. 返回RedirectToAction(“Profile”,“Home”); ......其中Profile是一个控制器
  2. return View(returnUrl); ...您在方法中设置并分配变量的地方
  3. 或使用RedirectToLocal(returnUrl);
  4. 保留上述内容 祝你好运。

答案 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;
    }

我需要在我的家庭控制器的索引操作中调用以检查用户是否已登录。