WebSecurity CreateUserAndAccount

时间:2013-08-23 01:59:11

标签: c# sql-server-2008 security asp.net-mvc-4

我调用CreateUserAndAccount方法,在用户名和密码中给出String。但我得到一个例外,说硬编码字符串为空。 怎么可能这样!!! 我在这里遗漏了什么?

代码:WebSecurity.CreateUserAndAccount("Admin", "Admin", null, false);

SQLEXCEPTION:无法将值NULL插入“UserPwd”列,表'servidb.dbo.User';列不允许空值。 INSERT失败。

我也将表的名称从UserProfile更改为User和Password列。可能在这里犯了错误吗?

问候。

ps:我不知道要显示的其他代码。如果需要更多信息,请询问。

编辑:实际上我做了:

WebSecurity.InitializeDatabaseConnection("connectionString", "User", "UserId", "UserName", autoCreateTables: true);

我检查了数据库,用户是用列创建的。我的实体代码就是这个

[Table("User")]
public class User
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int UserId { get; set; }
    [Required]
    public string UserName { get; set; }
    [Required]
    public string UserPwd { get; set; }
}

2 个答案:

答案 0 :(得分:0)

可能是因为您更改了这些列名称,WebSecurity知道自己使用哪些列,它实际上使用自己生成的表,除了具有用户名的表。如果您正在使用Internet模板,可能它在您的InitializeSimplemembership.cs中。

WebSecurity.InitializeDatabaseConnection([here database username],
[here database password], [here YOUR talbe name containing user name column], 
[here user name column] , autoCreateTables: true);

因此,您只创建一个具有UserName列的表,这就是全部,其余的是由新表中的WebSecurity创建的。

答案 1 :(得分:0)

试试这个:

WebSecurity.CreateUserAndAccount("Admin", "Admin", new {UserPwd = ""}, false)

第3个参数表示一个匿名对象,可用于提供Required字段,以便SQL获取所需的所有非空值