【问题标题】:What is the use of ViewData["ReturnUrl"] = returnUrl in action methods of a controllerViewData["ReturnUrl"] = returnUrl 在控制器的操作方法中的用途是什么
【发布时间】:2016-08-10 16:42:58
【问题描述】:

当我使用Individual User Accounts 身份验证创建一个 ASP.NET Core Web 项目时,我注意到 VS2015 创建了一个带有许多操作方法的AccountController。这些操作方法中的大多数都包含输入可选参数string returnUrl = null,在这些方法中我们有ViewData["ReturnUrl"] = returnUrl;,如下面的一个示例所示。

问题

  1. 这个可选输入参数和这些操作方法中的ViewData["ReturnUrl"] = returnUrl;语句有什么用? 2. 什么时候应该在action方法中使用这些,什么时候应该避免使用它们?

获取方法

[HttpGet]
[AllowAnonymous]
public IActionResult Login(string returnUrl = null)
{
    ViewData["ReturnUrl"] = returnUrl;
    return View();
}

发布方法

[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.UserName, 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);
        }

【问题讨论】:

    标签: c# visual-studio-2015 asp.net-core asp.net-core-mvc


    【解决方案1】:

    当您想将用户返回到他最初想访问的页面时,您需要将返回 url 传递给您的视图,然后才会提示他登录。

    您可以使用 ViewData 或作为模型的常规属性来执行此操作。

    所以你传递returnurl,只是因为你不想“忘记”用户来自哪里。

    【讨论】:

    • 感谢您分享您的知识。
    【解决方案2】:

    你可以像这样在视图上解析 returnUrl

    <form asp-controller="Account" asp-action="Login" asp-route-returnurl="@viewdata["ReturnUrl"]" method="post" class="form-horizontal">
    

    .....//为简洁起见删除了 html 的其余部分

    Solution was found Here

    【讨论】:

      【解决方案3】:

      当您访问需要授权的网站时,您需要在用户通过身份验证后将其返回到他们最初访问的页面。这会保存返回 url,以便它可以用来将用户重定向回他们的原始页面(而不是像主页这样的默认页面)。如果您希望用户在登录后始终转到默认页面,则可以将其删除。不过,您需要设置默认页面重定向。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-09-11
        • 1970-01-01
        • 2016-09-22
        • 1970-01-01
        • 2019-12-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多