首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在控制器的动作方法中,ViewData[" returnUrl "] =returnUrl的用法是什么?

在控制器的动作方法中,ViewData[" returnUrl "] =returnUrl的用法是什么?
EN

Stack Overflow用户
提问于 2016-08-10 16:42:58
回答 3查看 8.5K关注 0票数 3

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

问题

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

获取方法

代码语言:javascript
复制
[HttpGet]
[AllowAnonymous]
public IActionResult Login(string returnUrl = null)
{
    ViewData["ReturnUrl"] = returnUrl;
    return View();
}

Post法

代码语言:javascript
复制
[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);
        }
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-08-10 16:46:32

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

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

因此,您传递返回托槽,仅仅是因为您不想“忘记”用户来自哪里。

票数 9
EN

Stack Overflow用户

发布于 2017-10-01 00:50:29

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

代码语言:javascript
复制
<form asp-controller="Account" asp-action="Login" asp-route-returnurl="@viewdata["ReturnUrl"]" method="post" class="form-horizontal">

.// html的其余部分为了简洁而移除

在这里找到了解决办法

票数 5
EN

Stack Overflow用户

发布于 2016-08-10 17:12:02

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38879165

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档