Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用C#ASP.NET MVC标识以编程方式创建用户_C#_Asp.net_Asp.net Mvc_Asp.net Web Api_Asp.net Mvc 5 - Fatal编程技术网

使用C#ASP.NET MVC标识以编程方式创建用户

使用C#ASP.NET MVC标识以编程方式创建用户,c#,asp.net,asp.net-mvc,asp.net-web-api,asp.net-mvc-5,C#,Asp.net,Asp.net Mvc,Asp.net Web Api,Asp.net Mvc 5,我试图以编程方式将用户添加到ASP.NET MVC标识中 我遇到的错误是:UserManager引发了类型为“System.NullReferenceException”的异常。 此函数是通过非来自此站点的帖子调用的。它位于AccountController中公共异步任务寄存器(RegisterViewModel模型)的正下方 [AllowAnonymous] public async Task<bool> GenerateUser(string email) { v

我试图以编程方式将用户添加到ASP.NET MVC标识中

我遇到的错误是:
UserManager引发了类型为“System.NullReferenceException”的异常。

此函数是通过非来自此站点的帖子调用的。它位于AccountController中公共异步任务寄存器(RegisterViewModel模型)的正下方

[AllowAnonymous]
public async Task<bool> GenerateUser(string email)
{
        var user = new ApplicationUser { UserName = email, Email = email };
        string password = System.Web.Security.Membership.GeneratePassword(12, 4);
        var result = await UserManager.CreateAsync(user, password);

        if (result.Succeeded)
        {
           // Omitted
        }
        else { AddErrors(result); }

        return true;
 }

编辑2:

如所需:这是
ApplicationUserManager

    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 = 8,
            RequireNonLetterOrDigit = false,
            RequireDigit = false,
            RequireLowercase = false,
            RequireUppercase = false,
        };

        // Configure user lockout defaults
        manager.UserLockoutEnabledByDefault = true;
        manager.DefaultAccountLockoutTimeSpan = TimeSpan.FromMinutes(5);
        manager.MaxFailedAccessAttemptsBeforeLockout = 5;

        // Register two factor authentication providers. This application uses Phone and Emails as a step of receiving a code for verifying the user
        // You can write your own provider and plug it in here.
        manager.RegisterTwoFactorProvider("Phone Code", new PhoneNumberTokenProvider<ApplicationUser>
        {
            MessageFormat = "Your security code is {0}"
        });
        manager.RegisterTwoFactorProvider("Email Code", new EmailTokenProvider<ApplicationUser>
        {
            Subject = "Security Code",
            BodyFormat = "Your security code is {0}"
        });
        manager.EmailService = new EmailService();
        manager.SmsService = new SmsService();
        var dataProtectionProvider = options.DataProtectionProvider;
        if (dataProtectionProvider != null)
        {
            manager.UserTokenProvider = 
                new DataProtectorTokenProvider<ApplicationUser>(dataProtectionProvider.Create("ASP.NET Identity"));
        }
        return manager;
    }
}
公共静态应用程序服务器管理器创建(IdentityFactoryOptions选项,IOwinContext上下文)
{
var manager=newapplicationUserManager(newuserstore(context.Get());
//为用户名配置验证逻辑
manager.UserValidator=新的UserValidator(管理器)
{
AllowOnlyAlphanumericUserNames=false,
RequireUniqueEmail=true
};
//配置密码的验证逻辑
manager.PasswordValidator=新密码验证器
{
所需长度=8,
RequiredOnletterDigit=false,
RequireDigit=false,
RequireLowercase=false,
RequireUppercase=false,
};
//配置用户锁定默认值
manager.UserLockoutEnabledByDefault=true;
manager.DefaultAccountLockoutTimeSpan=TimeSpan.FromMinutes(5);
manager.MaxFailedAccessAttemptsBeforeLockout=5;
//注册双因素身份验证提供商。此应用程序使用电话和电子邮件作为接收验证用户代码的步骤
//您可以编写自己的提供者并将其插入此处。
manager.RegisterWofactorProvider(“电话代码”,新电话号码提供程序)
{
MessageFormat=“您的安全代码为{0}”
});
manager.RegisterWofactorProvider(“电子邮件代码”,新的EmailTokenProvider
{
Subject=“安全代码”,
BodyFormat=“您的安全代码为{0}”
});
manager.EmailService=新的EmailService();
manager.SmsService=新的SmsService();
var dataProtectionProvider=options.dataProtectionProvider;
if(dataProtectionProvider!=null)
{
manager.UserTokenProvider=
新的DataProtectorTokenProvider(dataProtectionProvider.Create(“ASP.NET标识”);
}
退货经理;
}
}

问题在于UserManager,这解决了问题

    ApplicationDbContext context = new ApplicationDbContext();

    var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(context));
    var UserManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(context));
    UserManager.UserValidator = new UserValidator<ApplicationUser>(UserManager)
    {
        AllowOnlyAlphanumericUserNames = false,
        RequireUniqueEmail = true
    };

    string password = System.Web.Security.Membership.GeneratePassword(12, 4);
    var user = new ApplicationUser();
    user.Email = model.Email;
    user.UserName = model.Email;

    string userPWD = password;

    var result = UserManager.Create(user, userPWD);
ApplicationDbContext context=new ApplicationDbContext();
var角色管理器=新角色管理器(新角色存储(上下文));
var UserManager=newusermanager(newuserstore(context));
UserManager.UserValidator=新的UserValidator(UserManager)
{
AllowOnlyAlphanumericUserNames=false,
RequireUniqueEmail=true
};
字符串密码=System.Web.Security.Membership.GeneratePassword(12,4);
var user=new ApplicationUser();
user.Email=model.Email;
user.UserName=model.Email;
字符串userPWD=密码;
var result=UserManager.Create(user,userPWD);

错误在哪里?@Cid它来自第一个代码块第6行的“result”变量。由于您使用的是
ApplicationUserManager
构造函数,您以前是否尝试设置
UserValidator
?我想你应该在这个上下文中设置
AllowOnlyAlphanumericUserNames=false
,你能在你的问题中显示
ApplicationUserManager
类定义吗?@tetsuyayayamamoto这给了我一个新的错误,但我们似乎取得了进展。我现在得到的
实体类型ApplicationUser不是当前上下文模型的一部分。
。我将其设置为
manager.UserValidator=newuservalidator(manager){AllowOnlyAlphanumericUserNames=false,RequireUniqueEmail=true}
我还创建了
密码验证程序
var result = new AccountController().GenerateUser(model.emailAddress);
    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 = 8,
            RequireNonLetterOrDigit = false,
            RequireDigit = false,
            RequireLowercase = false,
            RequireUppercase = false,
        };

        // Configure user lockout defaults
        manager.UserLockoutEnabledByDefault = true;
        manager.DefaultAccountLockoutTimeSpan = TimeSpan.FromMinutes(5);
        manager.MaxFailedAccessAttemptsBeforeLockout = 5;

        // Register two factor authentication providers. This application uses Phone and Emails as a step of receiving a code for verifying the user
        // You can write your own provider and plug it in here.
        manager.RegisterTwoFactorProvider("Phone Code", new PhoneNumberTokenProvider<ApplicationUser>
        {
            MessageFormat = "Your security code is {0}"
        });
        manager.RegisterTwoFactorProvider("Email Code", new EmailTokenProvider<ApplicationUser>
        {
            Subject = "Security Code",
            BodyFormat = "Your security code is {0}"
        });
        manager.EmailService = new EmailService();
        manager.SmsService = new SmsService();
        var dataProtectionProvider = options.DataProtectionProvider;
        if (dataProtectionProvider != null)
        {
            manager.UserTokenProvider = 
                new DataProtectorTokenProvider<ApplicationUser>(dataProtectionProvider.Create("ASP.NET Identity"));
        }
        return manager;
    }
}
    ApplicationDbContext context = new ApplicationDbContext();

    var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(context));
    var UserManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(context));
    UserManager.UserValidator = new UserValidator<ApplicationUser>(UserManager)
    {
        AllowOnlyAlphanumericUserNames = false,
        RequireUniqueEmail = true
    };

    string password = System.Web.Security.Membership.GeneratePassword(12, 4);
    var user = new ApplicationUser();
    user.Email = model.Email;
    user.UserName = model.Email;

    string userPWD = password;

    var result = UserManager.Create(user, userPWD);