【问题标题】:InvalidOperationException: Could not create an instance of type 'Microsoft.AspNetCore.Identity.UserManagerInvalidOperationException:无法创建“Microsoft.AspNetCore.Identity.UserManager”类型的实例
【发布时间】:2021-10-24 07:19:01
【问题描述】:

我打算在.net core mvc登录后获取用户的数据,但是出现这个错误,是什么?以及如何解决?

InvalidOperationException:无法创建类型为“Microsoft.AspNetCore.Identity.UserManager`1[[Microsoft.AspNetCore.Identity.IdentityUser, Microsoft.Extensions.Identity.Stores, Version=5.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60]]'。模型绑定的复杂类型不能是抽象类型或值类型,并且必须具有无参数构造函数。记录类型必须有一个主构造函数。或者,给“userManager”参数一个非空的默认值。

    private UserManager<ApplicationUser> _userManager;
    public void HomeController(UserManager<ApplicationUser> userManager)
    {
        _userManager = userManager;
    }

    public async Task<IActionResult> MySchedule(UserManager<IdentityUser> userManager)
    {
        var CourseChosen = from m in _context.CourseChosen
                               select m;
        var userid = _userManager.GetUserId(HttpContext.User);
        if (userid == null)
        {
            return RedirectToAction("Login", "Account");
        }
        else
        {
            ApplicationUser user = await _userManager.GetUserAsync(User);
            var identification = user.StudentId;
            CourseChosen = CourseChosen.Where(x => x.StudentId == identification);

            var coursechosen = new MyCourse
            {
                MyCourses = await CourseChosen.ToListAsync()
            };

            return View(coursechosen);
        }
    }

【问题讨论】:

  • 嗨@Weber Wang,这个错误是由UserManager&lt;IdentityUser&gt; userManager作为MySchedule操作中的参数引起的。只需将其删除。
  • 嗨@Rena,我删除了它,但它显示“System.NullReferenceException:'对象引用未设置为对象的实例。' " 在 var userid = _userManager.GetUserId(HttpContext.User);这是什么意思?
  • 你好@Weber Wang,在使用_userManager.GetUserId之前,请先检查HttpContext.User是否包含数据。
  • @Rena,它显示 _userManager 为空,所以我认为我没有在 public void HomeController(UserManager userManager) { _userManager = userManager; } 我不知道发生了什么
  • 嗨@Weber Wang,public void HomeController 作为构造函数不正确。 void 不需要。

标签: asp.net-mvc asp.net-core asp.net-identity


【解决方案1】:

InvalidOperationException:无法创建类型的实例 'Microsoft.AspNetCore.Identity.UserManager`1[[Microsoft.AspNetCore.Identity.IdentityUser, Microsoft.Extensions.Identity.Stores,版本=5.0.0.0, 文化=中性,PublicKeyToken=adb9793829ddae60]]'。模型绑定 复杂类型不能是抽象类型或值类型,并且必须具有 无参数构造函数。记录类型必须有一个主要的 构造函数。或者,给“userManager”参数一个 非空默认值。

MySchedule 操作中使用UserManager&lt;IdentityUser&gt; userManager 作为参数导致此错误。

只是改变:

public async Task<IActionResult> MySchedule(UserManager<IdentityUser> userManager)

收件人:

public async Task<IActionResult> MySchedule()

关于如何DI UserManager,应该是:

public class HomeController : Controller
{
    private readonly UserManager<IdentityUser> _userManager;

    //Constructor name should be the same as the class
    public HomeController(UserManager<IdentityUser> userManager)
    {
        _userManager = userManager;
    }
    //action below..
    //request url should be: Home/MySchedule if you use MVC

    public async Task<IActionResult> MySchedule()
    {....}
}

【讨论】:

    猜你喜欢
    • 2020-05-10
    • 2023-01-30
    • 2018-05-25
    • 2020-02-02
    • 2021-11-15
    • 2021-10-01
    • 1970-01-01
    • 2022-01-20
    • 2016-10-04
    相关资源
    最近更新 更多