我有以下cshtml登录页面
@{
Layout = "~/Views/Shared/_MyLayout.cshtml";
}
<form asp-area="Admin" asp-controller="Account" asp-action="Login" asp-route-returnurl="@ViewData["ReturnUrl"]" method="post" class="form-signin" role="form">
@Html.AntiForgeryToken()
<input asp-for="Username" class="form-control" required="" autofocus="" />
<span asp-validation-for="Username" class="text-danger"></span>
<input asp-for="Password" class="form-control input-md" required="" />
<span asp-validation-for="Password" class="text-danger"></span>
<button type="submit">Login</button>
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
</form>
以及以下控制器方法
[HttpGet]
[AllowAnonymous]
public IActionResult Login()
{
return View();
}
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Login(LoginViewModel model)
{
if (ModelState.IsValid)
{
ModelState.AddModelError(string.Empty, "You may not log in");
return View(model);
这适用于Internet Explorer。但是在Chrome中存在问题。
在Chrome中,我点击“登录”然后点击我的发布方法,并将无效的登录信息返回给我的浏览器。但是,当我第二次再次点击返回的页面登录时,它会在我的javascript浏览器控制台中显示一毫秒的错误消息然后消失,然后显示一个空白页面。
如果我注释掉[ValidateAntiForgeryToken]
,则第二次登录尝试会正确点击Chrome中的“登录发布”方法。
因此,问题仅限于POST上存在的ValidateAntiForgeryToken属性以及Chrome浏览器。 Internet Explorer没有问题,每次都会点击POST。