2017-08-10 72 views
1

我试图在aspnet样板文件中使用Identity实现忘记密码。在aspnet样板文件中实现忘记密码

  1. 我与个别用户身份验证Visual Studio创建一个新项目,实施和测试忘记密码的功能(项目名称:IdentityProject)。
  2. 然后我下载了abp项目并将App_Start/AppIdentityConfig.csIdentityModels文件从IdentityProject复制到ABPProject
  3. Startup.cs类此行Configuration方法:app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);

下面是我ApplicationUserManagerIdentityConfig.cs

public class ApplicationUserManager : UserManager<ApplicationUser> 
{ 
    public ApplicationUserManager(IUserStore<ApplicationUser> store) 
     : base(store) 
    { 
    } 

    public static ApplicationUserManager Create(IdentityFactoryOptions<ApplicationUserManager> options, IOwinContext context) 
    { 
     var manager = new ApplicationUserManager(new UserStore<ApplicationUser>(context.Get<ApplicationDbContext>())); 
     // Configure validation logic for usernames 
     manager.UserValidator = new UserValidator<ApplicationUser>(manager) 
     { 
      AllowOnlyAlphanumericUserNames = false, 
      RequireUniqueEmail = true 
     }; 

     // Configure validation logic for passwords 
     manager.PasswordValidator = new PasswordValidator 
     { 
      RequiredLength = 6, 
     }; 

     //removed some of the configuration code.. 

     var dataProtectionProvider = options.DataProtectionProvider; 
     if (dataProtectionProvider != null) 
     { 
      manager.UserTokenProvider = 
       new DataProtectorTokenProvider<ApplicationUser>(dataProtectionProvider.Create("ASP.NET Identity")); 
     } 
     return manager; 
    } 
} 

在运行的应用程序,我对Create方法的第一行越来越例外:

值不能为空。参数名:上下文

类型“System.ArgumentNullException”发生在 Microsoft.AspNet.Identity.EntityFramework.dll但尽管上下文参数有这个数据是不是在 用户代码

处理的例外:

下面是ApplicationDbContext类身份:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser> 
{ 
    public ApplicationDbContext() 
     : base("DefaultConnection", throwIfV1Schema: false) 
    { 
    } 

    public static ApplicationDbContext Create() 
    { 
     return new ApplicationDbContext(); 
    } 
} 

下面是类的ABPProjectDBContext

public class HRISDbContext : AbpZeroDbContext<Tenant, Role, User> 
{ 

    public HRISDbContext() 
     : base("Default") 
    { 

    } 
    public HRISDbContext(string nameOrConnectionString) 
     : base(nameOrConnectionString) 
    { 

    } 

    //This constructor is used in tests 
    public HRISDbContext(DbConnection existingConnection) 
    : base(existingConnection, false) 
    { 

    } 

    public HRISDbContext(DbConnection existingConnection, bool contextOwnsConnection) 
    : base(existingConnection, contextOwnsConnection) 
    { 

    } 
} 

可能是什么这个异常的原因,以及如何解决这个问题?

+0

请让我知道,如果我的问题不明确。 –

回答

0

在您的代码context.Get<ApplicationDbContext>()返回null(或看起来像它为null)。

在你startup.cs你需要添加

app.CreatePerOwinContext<ApplicationDbContext>(ApplicationDbContext.Create);