Asp.net mvc 5 无法访问MVC 5中AccountController的登录操作中的User.Identity.GetUserId()

Asp.net mvc 5 无法访问MVC 5中AccountController的登录操作中的User.Identity.GetUserId(),asp.net-mvc-5,visual-studio-2015,asp.net-identity-2,Asp.net Mvc 5,Visual Studio 2015,Asp.net Identity 2,当前环境 Visual Studio 2015、MVC5、Asp.net Identity 2.0、实体框架6.0 问题 我试图在用户刚刚通过身份验证后获取User.Identity.GetUserId(),但在浏览器中获取了“对象引用未设置为对象的实例” 期望值 如果可能,我希望将User.Identity.GetUserID()放在同一位置。我徘徊在可以访问项目中User.Identity.GetUserId()的起点 代码 // //POST:/帐户/登录 [HttpPost] [异名]

当前环境 Visual Studio 2015、MVC5、Asp.net Identity 2.0、实体框架6.0

问题 我试图在用户刚刚通过身份验证后获取User.Identity.GetUserId(),但在浏览器中获取了“对象引用未设置为对象的实例”

期望值 如果可能,我希望将User.Identity.GetUserID()放在同一位置。我徘徊在可以访问项目中User.Identity.GetUserId()的起点

代码
//
//POST:/帐户/登录
[HttpPost]
[异名]
[ValidateAntiForgeryToken]
公共异步任务登录(LoginView模型,字符串返回URL)
{
如果(!ModelState.IsValid)
{
返回视图(模型);
}
//这不会将登录失败计入帐户锁定
//要使密码失败触发帐户锁定,请更改为shouldLockout:true
var result=wait SignInManager.PasswordSignInAsync(model.Email、model.Password、model.RememberMe、shouldllockout:false);
字符串userID=User.Identity.GetUserId().ToString();
开关(结果)
{
案例标志状态成功:
返回重定向到本地(returnUrl);
案例标志状态锁定输出:
返回视图(“锁定”);
案例标志状态。要求验证:
return RedirectToAction(“SendCode”,new{ReturnUrl=ReturnUrl,RememberMe=model.RememberMe});
案例信号状态故障:
违约:
AddModelError(“,”登录尝试无效“);
返回视图(模型);
}
}
浏览器中的错误 “/”应用程序中出现服务器错误。 对象引用未设置为对象的实例。 描述:执行当前web请求期间发生未处理的异常。请查看堆栈跟踪以了解有关错误的更多信息以及错误在代码中的起源

异常详细信息:System.NullReferenceException:对象引用未设置为对象的实例

源错误:

第78行://要启用密码故障触发帐户锁定,请更改为shouldLockout:true 第79行:var result=wait SignInManager.PasswordSignInAsync(model.Email、model.Password、model.RememberMe、shouldllockout:false); 第80行:字符串userID=User.Identity.GetUserId().ToString(); 第81行:开关(结果)
第82行:{

您不能在登录后立即获取当前用户id,必须至少从用户发出一个新请求才能使登录生效。因此,如果您希望在调用
sign
方法后立即获取已登录的用户id,则必须使用用户管理器来获取id,而不是使用
user.Identity.GetUserId()
方法

var user = await UserManager.FindByNameAsync(model.Email);
var userId = user.Id;

请尝试改用当前代码

System.Web.HttpContext.Current.User.Identity.GetUserId();
“试试这个”的答案通常是不鼓励的,请扩展您的答案,包括如何以及为什么这样解决OP的问题
System.Web.HttpContext.Current.User.Identity.GetUserId();