【问题标题】:System.MissingMethodException: Method not found: 'Void Microsoft.AspNetCore.Identity.DataProtectorTokenProviderSystem.MissingMethodException:找不到方法:'无效 Microsoft.AspNetCore.Identity.DataProtectorTokenProvider
【发布时间】:2022-05-10 07:00:39
【问题描述】:

仍然在我遇到问题 DI Registration service type .net core 3.0 的同一个项目上。现在,当这个问题得到解决时,我得到了新的错误。 现在我的代码看起来:

    services.AddDbContext<ApplicationIdentityDbContext>(options =>
        options.UseSqlServer(configuration.GetConnectionString("Default")));

    services.AddIdentityCore<ApplicationUser>(options =>
        {
            options.Password.RequireDigit = false;
            options.Password.RequireLowercase = false;
            options.Password.RequireNonAlphanumeric = false;
            options.Password.RequireUppercase = false;
            options.Password.RequiredLength = 4;

            options.SignIn.RequireConfirmedEmail = true;
            options.Tokens.ProviderMap.Add("CustomEmailConfirmation",
                new TokenProviderDescriptor(
                    typeof(CustomEmailConfirmationTokenProvider<IdentityUser>)));

            options.Tokens.EmailConfirmationTokenProvider = "CustomEmailConfirmation";

        })
        .AddEntityFrameworkStores<ApplicationIdentityDbContext>();

    services.AddTransient(o =>
    {
        var service = new CustomEmailConfirmationTokenProvider<IdentityUser>(o.GetService<IDataProtectionProvider>(), o.GetService<IOptions<DataProtectionTokenProviderOptions>>(), o.GetService<ILogger<DataProtectorTokenProvider<IdentityUser>>>());

        return service;
    });

错误是:

System.MissingMethodException:找不到方法:'无效 Microsoft.AspNetCore.Identity.DataProtectorTokenProvider1..ctor(Microsoft.AspNetCore.DataProtection.IDataProtectionProvider, Microsoft.Extensions.Options.IOptions1)'。

【问题讨论】:

    标签: c# asp.net-core-3.0 .net-core-3.0


    【解决方案1】:

    我遇到了同样的问题,问题与包本身有关。

    基本上,问题在于许多 Microsoft.AspNetCore.* 包现在已移至 Microsoft.AspNetCore.App 框架,因此您删除了 Microsoft.AspNetCore.Identity 引用并将其添加到您的项目中:

    <ItemGroup>
        <FrameworkReference Include="Microsoft.AspNetCore.App" />
    </ItemGroup>
    

    我注意到我的构造函数(与您的相同)缺少附加参数 ILogger&lt;DataProtectorTokenProvider&lt;TUser&gt;&gt;,您可以在此 link. 上的 .NET Core 3.* 版本中看到它

    【讨论】:

    • 我只想感谢您回答这个问题 - 这个解决方案对我有用,但有一点需要注意。我的 Function App 面向 .Net Core 2.1,但我的共享库面向 .Net Standard 2.0(应该是对应的 Core 到 Standard 版本),但这可能是包版本不匹配的原因。将类库更改为 Core 2.1 并执行您概述的步骤对我有用。我已经忍受这个问题很长时间了,我现在不知道该怎么办...
    • 难以注意到的小事让它更加令人沮丧,但我猜这就是编程的工作方式
    【解决方案2】:

    我在为密码重置电子邮件创建自定义 JWT 提供程序时遇到了同样的问题。我没有从DataProtectorTokenProvider&lt;TUser&gt;继承,而是直接实现了IUserTwoFactorTokenProvider&lt;TUser&gt;接口。您需要自己实现 CanGenerateTwoFactorTokenAsync 方法,但您可以避免使用 hacky 框架参考。

    发件人:

    public class MyTokenProvider<TUser> 
        : DataProtectorTokenProvider<TUser> where TUser : IdentityUser
    

    收件人:

    public class MyTokenProvider<TUser> 
        : IUserTwoFactorTokenProvider<TUser> where TUser : IdentityUser
    

    【讨论】:

      【解决方案3】:

      我在引用 Microsoft.AspNetCore.Authentication.JwtBearer 包并使用 AddJwtBearer 扩展方法时遇到了同样的问题。似乎版本 5.0.16 还可以,但是 6.0.0、6.0.3 和 6.0.4 坏了(没有费心尝试 6.0.1 和 6.0.2)——它们引入了不兼容的 Microsoft.IdentityModel.Tokens.dll 版本。所以我的解决方案是降级到 5.0.16

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-04-01
        • 2011-12-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-10-25
        • 2020-11-25
        • 1970-01-01
        相关资源
        最近更新 更多