在我的带有Individual User Account
身份验证的ASP.NET MVC Core Web应用程序中,默认login()get和post动作方法(如下所示)中的returnurl
始终为null。我通过在行ViewData["ReturnUrl"] = returnUrl;
之后放置一个断点来验证它。当我登录到应用程序时,我在断点处看到returnUrl始终为null。为什么即使我可以看到相应的表单标记定义了asp-route-returnurl="@ViewData["ReturnUrl"]"
属性值?我在其他操作方法中看到了相同的null行为,我正在使用returnUrl并确保这些操作方法的相应表单标记定义了asp-route-returnurl="@ViewData["ReturnUrl"]"
属性。
AccountCountroller :
[Authorize]
public class AccountController : Controller
{
//
// GET: /Account/Login
[HttpGet]
[AllowAnonymous]
public IActionResult Login(string returnUrl = null)
{
ViewData["ReturnUrl"] = returnUrl;
return View();
}
//
// POST: /Account/Login
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Login(LoginViewModel model, string returnUrl = null)
{
ViewData["ReturnUrl"] = returnUrl;
if (ModelState.IsValid)
{
// This doesn't count login failures towards account lockout
// To enable password failures to trigger account lockout, set lockoutOnFailure: true
var result = await _signInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, lockoutOnFailure: false);
if (result.Succeeded)
{
_logger.LogInformation(1, "User logged in.");
return RedirectToLocal(returnUrl);
}
if (result.RequiresTwoFactor)
{
return RedirectToAction(nameof(SendCode), new { ReturnUrl = returnUrl, RememberMe = model.RememberMe });
}
if (result.IsLockedOut)
{
_logger.LogWarning(2, "User account locked out.");
return View("Lockout");
}
else
{
ModelState.AddModelError(string.Empty, "Invalid login attempt.");
return View(model);
}
}
// If we got this far, something failed, redisplay form
return View(model);
}
}
login.cshtml视图的快照:
<form asp-controller="Account" asp-action="Login" asp-route-returnurl="@ViewData["ReturnUrl"]" method="post" class="form-horizontal">
.....//rest of the html removed for brevity
.....
</form>