当前位置:  开发笔记 > 编程语言 > 正文

ASP.NET Core Identity不会注入UserManager <ApplicationUser>

如何解决《ASP.NETCoreIdentity不会注入UserManager<ApplicationUser>》经验,为你挑选了1个好方法。

我有一个较旧的asp.net核心身份数据库,我想将一个新项目(一个web api)映射到它.

仅仅为了测试,我复制了Models文件夹,以及上一个项目中的ApplicationUser文件(ApplicationUser只是继承自IdentityUser,没有任何变化) - 首先执行DB似乎是一个坏主意.

我在ConfigureServices中注册了Identity(但我没有将它添加到管道中,因为我的唯一目的是使用UserStore)

        services.AddIdentity()
            .AddEntityFrameworkStores()
            .AddDefaultTokenProviders();

我的期望是现在

     UserManager

...应该自动注入构造函数.

但是,将以下代码添加到控制器私有UserManager _userManager时;

    public UserController(UserManager userManager)
    {
        _userManager = userManager;
    }

...每次调用api都会以异常结束:HttpRequestException:响应状态代码不表示成功:500(内部服务器错误).

删除"注入"代码可以顺利运行可以接受请求的web api.

在我的任何代码到达之前发生这种情况很难调试.知道为什么会这样吗?

PS从异常设置窗口启用所有异常后我得到了这个:

抛出异常:
Microsoft.Extensions.DependencyInjection.dll中的"System.InvalidOperationException"

附加信息:尝试激活'Microsoft.AspNetCore.Identity.EntityFrameworkCore.UserStore`4 [Namespace.Models]时,无法解析类型'Namespace.Data.ApplicationDbContext'的服务.ApplicationUser,Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityRole,Namespace.Data.ApplicationDbContext,System.String]".

Mihail Stanc.. 9

你有app.UseIdentity();这个Configure方法的电话:

 public void Configure(IApplicationBuilder app, 
                       IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
        /*...*/
        app.UseIdentity();
       /*...*/          
    }

编辑 你还有这条services.AddIdentity()线吗?

 public void ConfigureServices(IServiceCollection services)
 {
        // Add framework services.
        services.AddDbContext(options =>
             options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

 }

这应该工作正常.还请检查是否ApplicationDbContext继承自IdentityDbContext.



1> Mihail Stanc..:

你有app.UseIdentity();这个Configure方法的电话:

 public void Configure(IApplicationBuilder app, 
                       IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
        /*...*/
        app.UseIdentity();
       /*...*/          
    }

编辑 你还有这条services.AddIdentity()线吗?

 public void ConfigureServices(IServiceCollection services)
 {
        // Add framework services.
        services.AddDbContext(options =>
             options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

 }

这应该工作正常.还请检查是否ApplicationDbContext继承自IdentityDbContext.


Mihail提到添加app.UseIdentity().这已在CORE 2.0中弃用.该方法现在是app.UseAuthentication().希望这可以帮助.
`UseAuthentication()`似乎也没有注册这些管理器.
你的编辑修好了,现在我很尴尬.我会在一天的剩余时间里掩饰自己的脸......
推荐阅读
php
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有