我試圖在創建一個默認的ASP.NET核心與「個人用戶帳戶」後,在登錄操作中從用戶對象獲取「id」值並始終返回null。線路(VAR objUser = User.Claims.FirstOrDefault()值;)從像主頁/索引其他行動存取時它User.Claims.FirstOrDefault()。登錄操作時的值爲空(ASP.NET身份3)?
[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)
{
var objUser = User.Claims.FirstOrDefault().Value;
_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);
}
用戶對象不爲空
public IActionResult Index()
{
var x = User.Claims.FirstOrDefault().Value;
return View();
}
是否有一個在結果後在登錄操作中擁有User對象的方式。成功了嗎?
感謝, AG
爲什麼使用'FirstOrDefault()'的'.Value'?你是否收到錯誤/異常?當然你可以做'var x = User.Claims.FirstOrDefault();'FirstOrDefault()'方法返回對象,如果它找到一個,否則返回null。然後你可以做一個'null'check:'if(x!= null){...}'。 –
或者,如果您想在一行中分配'x',則可以在C#6.0中使用空傳播:'var x = User.Claims.FirstOrDefault()?Value;' –
'用戶'在登錄操作時始終爲空並在其他操作不爲空 – AG70