The account login used to work fine, but now it gives error :
This page isn’t working
If the problem continues, contact the site owner.
HTTP ERROR 400
The browser url is https://localhost:7185/Account/Login?returnurl=%2F
The only change from before is I have created a custom _PartialView
for my Identity.
Here is my code-
AccountController.cs:
// Login
[HttpGet]
public IActionResult Login(string? returnUrl = null)
{
LoginAccountViewModel loginViewModel = new LoginAccountViewModel();
loginViewModel.ReturnUrl = returnUrl ?? Url.Content("~/");
return View(loginViewModel);
}
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Login(LoginAccountViewModel loginViewModel, string returnUrl)
{
if (ModelState.IsValid)
{
var result = await _signInManager.PasswordSignInAsync(loginViewModel.UserName, loginViewModel.Password, loginViewModel.RememberMe, lockoutOnFailure: false);
if (result.Succeeded)
{
return RedirectToAction("Index", "Home");
}
else
{
ModelState.AddModelError(string.Empty, "Invalid login attempt.");
return View(loginViewModel);
}
}
return View(loginViewModel);
}
Edit:
After debugging, I found that the my code could not find the [HttpPost]
in my controller hence giving error No resource found
. I do not know why this is caused.
Update:
Login.cshtml:
<form asp-controller="Account" asp-action="Login" asp-route-returnurl="@Model.ReturnUrl" method="post" role="form">
<div class="p-4 p-md-5 border rounded-3 bg-body-tertiary">
<!-- Right Side -->
<div class="col-md-5 col-lg-4 order-md-last">
<!-- OAuth -->
</div>
<!-- Left Side -->
<div class="col-md-7 col-lg-8">
<h4 class="mb-3">Account Login Details</h4>
<form class="needs-validation" novalidate="">
<div class="row g-3">
<!-- UserName -->
<div class="col-12">
<label asp-for="UserName" class="form-label">Username</label>
<div class="input-group has-validation">
<span class="input-group-text">@@</span>
<input asp-for="UserName" type="text" class="form-control" id="username" placeholder="Username" required>
<div class="invalid-feedback">
Your username is required.
</div>
</div>
</div>
<!-- Password -->
<div class="col-12">
<label asp-for="Password" class="form-label">Password</label>
<input asp-for="Password" type="password" class="form-control" id="password" placeholder="Password">
<div class="invalid-feedback">
Please enter atleast 6 characters.
</div>
</div>
</div>
<hr class="my-4">
<!-- Remember Me -->
<div class="form-check">
<label asp-for="RememberMe">
<input asp-for="RememberMe" />
@Html.DisplayNameFor(m => m.RememberMe)
</label>
</div>
<hr class="my-4">
<!-- Login -->
<div class="form-group mb-3">
<button class="w-100 btn btn-primary btn-lg" type="submit">Login</button>
</div>
<hr class="my-4">
<!-- Register -->
<p>
<a class="mb-5" asp-action="Register">Havent Registered yet?</a>
</p>
</form>
</div>
</div>
</form>
No other errors found.
Is there anything I am missing?
The reason why you face the 400 error is you don't set the validation token.
You should set the @Html.AntiForgeryToken()
inside the form tag.
More details, you could refer to below login view codes:
<form asp-controller="Account" asp-action="Login" asp-route-returnurl="@Model.ReturnUrl" method="post" role="form">
<div class="p-4 p-md-5 border rounded-3 bg-body-tertiary">
<!-- Right Side -->
<div class="col-md-5 col-lg-4 order-md-last">
<!-- OAuth -->
</div>
<!-- Left Side -->
<div class="col-md-7 col-lg-8">
<h4 class="mb-3">Account Login Details</h4>
<form class="needs-validation" novalidate="">
@Html.AntiForgeryToken()
<div class="row g-3">
<!-- UserName -->
<div class="col-12">
<label asp-for="UserName" class="form-label">Username</label>
<div class="input-group has-validation">
<span class="input-group-text">@@</span>
<input asp-for="UserName" type="text" class="form-control" id="username" placeholder="Username" required>
<div class="invalid-feedback">
Your username is required.
</div>
</div>
</div>
<!-- Password -->
<div class="col-12">
<label asp-for="Password" class="form-label">Password</label>
<input asp-for="Password" type="password" class="form-control" id="password" placeholder="Password">
<div class="invalid-feedback">
Please enter atleast 6 characters.
</div>
</div>
</div>
<hr class="my-4">
<!-- Remember Me -->
<div class="form-check">
<label asp-for="RememberMe">
<input asp-for="RememberMe" />
@Html.DisplayNameFor(m => m.RememberMe)
</label>
</div>
<hr class="my-4">
<!-- Login -->
<div class="form-group mb-3">
<button class="w-100 btn btn-primary btn-lg" type="submit">Login</button>
</div>
<hr class="my-4">
<!-- Register -->
<p>
<a class="mb-5" asp-action="Register">Havent Registered yet?</a>
</p>
</form>
</div>
</div>
</form>
Result: