userManager.FindById(userId) 抛出 ArgumentNullException
userManager.FindById(userId) throws ArgumentNullException
我知道这个问题已经有人问过,但 none 的答案似乎合适。
我已经使用个人帐户设置了标准 asp.net MVC 5 网络应用程序。
我没有更改 AccountController 中的任何内容。
我刚刚创建了一个新的控制器,在 Index 操作方法中,前两行是:
var userId = User.Identity.GetUserId();
var user = userManager.FindById(userId);
我也声明一个ApplicationUserManager
:
private ApplicationUserManager userManager;
userManager.FindById(userId)
抛出 ArgumentNullException
.
一切看起来像这样:
[Authorize]
public class WishlistController : Controller
{
private ApplicationDbContext db;
private ApplicationUserManager userManager;
// GET: Wishlist
public ActionResult Index()
{
var userId = User.Identity.GetUserId();
var user = userManager.FindById(userId); // This line throws the exception
db = new ApplicationDbContext();
return View(db.Wishlists.ToList().Where(wishlist => wishlist.User.Id == user.Id));
}
编辑
问题名称已更改,因为我发现 User.Identity.GetUserId()
无论如何都不会 return null
。它 return 是一个不错的长字符串。
我仍然遇到 FindById(userId)
的问题。
如果您将其调用到其他控制器中,请尝试
var t = System.Web.HttpContext.Current.User.Identity.GetUserId();
由于您使用的方式仅在视图直接命中的控制器中有效。
我 期望 您发布的代码(在您的第 4 次修订中)在指示的行失败,但我希望它会引发 NullReferenceException
而不是 ArgumentNullException
。您声明一个ApplicationUserManager
变量,但没有初始化它。因此,当您尝试对其调用方法时,应该会失败。
我不确定你为什么要检索 User
对象。您对 User
对象所做的一切就是检索用户 ID - 这正是您最初用于获取 User
的内容。为什么不直接使用用户 ID?在这种情况下,您甚至不需要 ApplicationUserManager
.
成功登录后,RedirectToAction("PostRegister")
使用 [Authorize]
属性并继续您的逻辑。 PostRegister
是我在 AccountController
中创建的一个动作。这解决了我的问题。
我知道这个问题已经有人问过,但 none 的答案似乎合适。
我已经使用个人帐户设置了标准 asp.net MVC 5 网络应用程序。
我没有更改 AccountController 中的任何内容。 我刚刚创建了一个新的控制器,在 Index 操作方法中,前两行是:
var userId = User.Identity.GetUserId();
var user = userManager.FindById(userId);
我也声明一个ApplicationUserManager
:
private ApplicationUserManager userManager;
userManager.FindById(userId)
抛出 ArgumentNullException
.
一切看起来像这样:
[Authorize]
public class WishlistController : Controller
{
private ApplicationDbContext db;
private ApplicationUserManager userManager;
// GET: Wishlist
public ActionResult Index()
{
var userId = User.Identity.GetUserId();
var user = userManager.FindById(userId); // This line throws the exception
db = new ApplicationDbContext();
return View(db.Wishlists.ToList().Where(wishlist => wishlist.User.Id == user.Id));
}
编辑
问题名称已更改,因为我发现 User.Identity.GetUserId()
无论如何都不会 return null
。它 return 是一个不错的长字符串。
我仍然遇到 FindById(userId)
的问题。
如果您将其调用到其他控制器中,请尝试
var t = System.Web.HttpContext.Current.User.Identity.GetUserId();
由于您使用的方式仅在视图直接命中的控制器中有效。
我 期望 您发布的代码(在您的第 4 次修订中)在指示的行失败,但我希望它会引发 NullReferenceException
而不是 ArgumentNullException
。您声明一个ApplicationUserManager
变量,但没有初始化它。因此,当您尝试对其调用方法时,应该会失败。
我不确定你为什么要检索 User
对象。您对 User
对象所做的一切就是检索用户 ID - 这正是您最初用于获取 User
的内容。为什么不直接使用用户 ID?在这种情况下,您甚至不需要 ApplicationUserManager
.
成功登录后,RedirectToAction("PostRegister")
使用 [Authorize]
属性并继续您的逻辑。 PostRegister
是我在 AccountController
中创建的一个动作。这解决了我的问题。