ReturnUrl不工作,始终为null

时间:2016-09-06 19:52:50

标签: c# asp.net-mvc asp.net-core

在我的带有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>

0 个答案:

没有答案