我正在尝试将表单身份验证添加到mvc站点,当我运行应用程序时,我被重定向到登录页面(这是正确的)。但是,每次我尝试登录时,页面都会刷新,而控制器永远不会收到邮件请求。我认为我的表单身份验证已关闭并将所有请求重定向回登录页面?任何帮助将不胜感激!
下面是我的网络配置信息:
<authentication mode="Forms">
<forms loginUrl="~/Account" timeout="30" slidingExpiration="false" requireSSL="false" />
</authentication>
<authorization>
<deny users ="?" />
<allow users = "*" />
</authorization>
以下是我的登录页面:
@using (Html.BeginForm("Login", "Account", FormMethod.Post))
{
@Html.LabelFor(x => x.Username)<br />
@Html.TextBoxFor(x => x.Username)
<br />
<br />
@Html.LabelFor(x => x.Password)<br />
@Html.TextBoxFor(x => x.Password)
<br />
<br />
<br />
<input type="submit" value="Login" />
}
以下是我的控制器:
[HttpGet]
public ActionResult Index()
{
return View("~/Views/Account/Login.cshtml", new LoginViewModel());
}
[HttpPost]
public ActionResult Login(LoginViewModel viewModel)
{
Membership.ValidateUser(viewModel.Username, viewModel.Password);
FormsAuthentication.SetAuthCookie(viewModel.Username, viewModel.RememberMe);
return View("~/Views/Account/Login.cshtml", viewModel);
}
答案 0 :(得分:2)
我相信POST
正在发生,但您有我朋友的问题是您正在重定向到POST
末尾的登录页面。
return View("~/Views/Account/Login.cshtml", viewModel);
将用户引导至主页。
答案 1 :(得分:2)
其他人建议从Login HttpPost操作重定向到主页,但Visual Studio创建的标准MVC“Intranet Application”模板会尝试重定向到由FormsAuthentication作为查询字符串传递给Login操作的returnUrl。基础设施:
if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/")
&& !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\"))
{
return Redirect(returnUrl);
}
else
{
return RedirectToAction("Index", "Home");
}
除非你有充分的理由不这样做,否则我会复制这个。
答案 2 :(得分:1)
这是对的。 因为那段代码:
public ActionResult Index()
{
return View("~/Views/Account/Login.cshtml", new LoginViewModel());
}
将其更改为return View();
并在相应的文件夹中创建名为Index的View。