我正在使用Identity进行.NET Core 3.1项目。在Login.cs.html
页面上,OnGetAsync()
页面处理程序如下:
public async Task OnGetAsync(string returnUrl = null)
{
if (!string.IsNullOrEmpty(ErrorMessage))
{
ModelState.AddModelError(string.Empty, ErrorMessage);
}
returnUrl = returnUrl ?? Url.Content("~/");
// Clear the existing external cookie to ensure a clean login process
await HttpContext.SignOutAsync(IdentityConstants.ExternalScheme);
ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync())
.ToList();
ReturnUrl = returnUrl;
}
我对代码returnUrl = returnUrl ?? Url.Content("~/");
的行以及为什么这样写感到有些困惑。为什么要检查returnUrl
是否为null
,而不总是为null
?为什么不删除string returnUrl = null
作为方法参数并分配ReturnUrl = Url.Content("~/");
?我在这里想念什么吗?
答案 0 :(得分:2)
returnUrl
参数已设置为使用optional argument:
如果没有为该参数发送参数,则使用默认值。
对于身份的默认设置,returnUrl
的值来自请求URL的查询字符串。例如,以下URL为returnUrl
参数提供了一个值:
/Identity/Account/Login?returnUrl=/Some/Protected/Route
在这种情况下,returnUrl
将不是为null
。但是,请考虑以下URL:
/Identity/Account/Login
在这种情况下,returnUrl
将是null
。登录过程完成后,没有URL可以重定向到,因此您调出的行会将其设置为Url.Content("~/")
。这只是意味着它将最终将用户重定向到Web应用程序的根目录,通常是主页。