我们有一个需要登录的内部ASP.NET MVC应用程序.登录工作很好,并做了预期的事情.我们的会话有效期为5分钟.在该段时间内坐在单个页面上之后,用户已经丢失了会话.如果他们尝试刷新当前
我的问题是(在重新登录之后)告诉MVC重定向到他们的(刷新/浏览)尝试而不是总是获得HOME控制器页面?
通常这应该自动发生.当匿名用户命中受保护资源时(由于会话过期,他是匿名用户),FormsAuthentication模块会拦截此请求,并通过附加指向受保护资源的ReturnUrl查询字符串参数重定向到您在web.config中注册的loginUrl.因此,例如,如果您将〜/ Account / LogOn配置为您的登录URL,并且匿名用户尝试点击〜/ Foo / Bar受保护资源,他将被重定向到〜/ Account / LogOn?ReturnUrl = / Foo / Bar.
然后,他将看到一个登录页面,在那里他将输入他的凭据并将表单提交给帐户控制器上的[HttpPost] LogOn操作.将验证凭据,如果有效,将生成新的表单身份验证cookie,并将用户重定向到最初请求的受保护资源.
以下是LogOn操作中的相应代码:
[HttpPost] public ActionResult LogOn(LogOnModel model, string returnUrl) { if (ModelState.IsValid) { if (Membership.ValidateUser(model.UserName, model.Password)) { FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe); if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/") && !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\")) { return Redirect(returnUrl); } else { return RedirectToAction("Index", "Home"); } } else { ModelState.AddModelError("", "The user name or password provided is incorrect."); } } // If we got this far, something failed, redisplay form return View(model); }
注意成功验证后如何将用户重定向到默认的Home / Index或returnUrl参数.
当然,我在这里讲述的所有故事都适用于Visual Studio创建的默认ASP.NET MVC模板.如果由于某种原因您修改了此模板,这可能会解释您正在观察的行为.
在任何情况下,从我的回答中记住的事情是,如果您使用表单身份验证,模块将作为ReturnUrl查询字符串参数传递最初请求的受保护资源到配置的登录页面.因此,在成功进行身份验证后,您可以将用户重定向到此页面.