有人对此有问题吗?他给我抛出错误:名称不能为空或空。但在表中没有名为"名称"的属性。我想自定义 Asp.Net 标识。
控制器
public class HomeController : Controller
{
//
// GET: /Home/
public async Task<ActionResult> Index()
{
var userStore = new UserStore<User,Identity_2Context.MyRole,long,Identity_2Context.MyUserLogin,Identity_2Context.MyUserRole,Identity_2Context.MyClaim>(new Identity_2Context());
var manager = new UserManager<User,long>(userStore);
var user = new User()
{
UserName = "TehnoMac",Email = "TehnoMac@tehcno.com",IsApproved = true,IsLockedOut = false,
CreatedDate = DateTime.Now,LastActivityDate = DateTime.Now,LastLoginDate = DateTime.Now,FailedPasswordAnswerAttemptCount = 0,
FailedPasswordAttemptCount = 0
};
var result = await manager.CreateAsync(user, "test123test");
if (result.Succeeded)
{
var authenticationManager = HttpContext.GetOwinContext().Authentication;
var userIdentity = manager.Create(user, DefaultAuthenticationTypes.ApplicationCookie);
}
else
{
ViewBag.Text = result.Errors.FirstOrDefault();
}
return View();
}
}
身份模型公共类应用程序用户:身份用户 { }
public class MyClaim:IdentityUserClaim<long>
{
}
public class MyRole:IdentityRole<long,MyUserRole>
{
}
public class MyUserRole:IdentityUserRole<long>
{
}
public class MyUserLogin:IdentityUserLogin<long>
{
}
public class ApplicationDbContext : IdentityDbContext<ApplicationUser,MyRole,long,MyUserLogin,MyUserRole,MyClaim>
{
public ApplicationDbContext()
: base("DefaultConnection")
{
}
}
确保您指定了用户名。我遇到了同样的错误,设置UserName
属性后,错误消失了。
已解决(至少对我来说)通过从自定义标识中删除用户名属性(它在 GitHub ASPNetIdentitySample 项目中,我猜人们是从哪里得到它的)。它隐藏了 IdentityUser 中的 UserName 属性
不使用用户名,也必须为标识指定用户名。例如,您需要使用电子邮件和密码登录,而不是使用电子邮件变量设置用户名。
将电子邮件变量传递给用户名属性
为什么我们需要这样做?因为我们需要一个 IdentityUser 构造函数中的用户名。标识用户构造函数