实际上我已经从一个项目中复制了一个MVC 3系统,但现在看来我正在努力解决这个重定向问题
// POST:/ Account / 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);
}
所以,当我使用xxx.com/admin时,它需要我登录页面并按照上面的代码,但在成功的用户名和密码后,它应该重定向到管理主页,而不是。 任何人都可以有任何想法,这将有助于我继续。
干杯
答案 0 :(得分:0)
像这样使用
[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))
{
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);
}
答案 1 :(得分:0)
我一直遇到这个问题。您需要将returnUrl作为隐藏输入传递给表单,以便在登录POST上传回。
public ActionResult LogOn(returnUrl) {
return View(returnUrl);
}
[HttpPost]
public ActionResult LogOn(LogOnModel input) {
return Redirect(input.ReturnUrl);
}
问题是你在浏览器URL栏中看到returnUrl,但如果你看一下你的FORM动作,它可能只是转到“/ LogOn”。
您的另一个选择是将网址带到登录表单的操作中。
希望有所帮助。