nam*_*nam 0 c# asp.net-core-mvc visual-studio-2015 asp.net-core
当我使用Individual User Accounts
身份验证创建ASP.NET Core Web项目时,我注意到VS2015创建了AccountController
具有许多操作方法的。这些动作方法大多数都包含输入可选参数string returnUrl = null
,在这些方法ViewData["ReturnUrl"] = returnUrl;
中,如下面的一个示例所示。
问题:
ViewData["ReturnUrl"] = returnUrl;
在这些操作方法中,此可选输入参数和语句的用途是什么?2.什么时候应该在动作方法中使用它们,什么时候应该避免使用它们?获取方法:
[HttpGet]
[AllowAnonymous]
public IActionResult Login(string returnUrl = null)
{
ViewData["ReturnUrl"] = returnUrl;
return View();
}
Run Code Online (Sandbox Code Playgroud)
发布方式:
[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);
}
Run Code Online (Sandbox Code Playgroud)
当您想让用户返回到他最初想要访问的页面之前,需要在提示登录之前将返回URL传递给视图。
您可以使用ViewData或作为模型的常规属性来执行此操作。
因此,您传递回程URL只是因为您不想“忘记”用户来自何处。
您可以像这样解析视图上的 returnUrl
<form asp-controller="Account" asp-action="Login" asp-route-returnurl="@viewdata["ReturnUrl"]" method="post" class="form-horizontal">
Run Code Online (Sandbox Code Playgroud)
.....//为简洁起见,其余的 html 已删除
归档时间: |
|
查看次数: |
4392 次 |
最近记录: |