创建用户时出错 - ASP.NET System.Web.Providers

时间:2011-07-10 20:42:56

标签: c# asp.net asp.net-membership membership-provider

我正在使用新的ASP.NET Universal Providers,如Hanselman blog post comment所述:

我可以使用以下方法将其连接到身份验证:

     

<profile defaultProvider="DefaultProfileProvider" >
  <providers>
    <add name="DefaultProfileProvider" type="System.Web.Providers.DefaultProfileProvider1" connectionStringName="DefaultConnection" applicationName="/"/>
  </providers>
</profile>
<membership defaultProvider="DefaultMembershipProvider">
  <providers>
    <add name="DefaultMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider" connectionStringName="DefaultConnection"               enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false"             maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10"             applicationName="/" />
  </providers>
</membership>
<roleManager defaultProvider="DefaultRoleProvider">
  <providers>
    <add name="DefaultRoleProvider" type="System.Web.Providers.DefaultRoleProvider" connectionStringName="DefaultConnection" applicationName="/" />
  </providers>
</roleManager>

然后我尝试使用以下代码创建新用户

object akey = System.Guid.NewGuid();
MembershipCreateStatus status;
var member = new System.Web.Providers.DefaultMembershipProvider();               
member.CreateUser("New User", "password","newUser@newuser.com","First Pet","Rover",true,akey,out status)

我的堆栈跟踪错误:

  

对象引用未设置为对象的实例      在System.Web.Providers.Entities.ModelHelper.CreateEntityConnection(ConnectionStringSettings设置,String csdl,String ssdl,String msl)       在System.Web.Providers.Entities.ModelHelper.CreateMembershipEntities(ConnectionStringSettings设置)       at System.Web.Providers.DefaultMembershipProvider.Membership_CreateUser(String applicationName,String userName,String password,String salt,String email,String passwordQuestion,String passwordAnswer,Boolean isApproved,DateTime&amp; createDate,Boolean uniqueEmail,Int32 passwordFormat,Object&amp; providerUserKey)       at System.Web.Providers.DefaultMembershipProvider.CreateUser(String username,String password,String email,String passwordQuestion,String passwordAnswer,Boolean isApproved,Object providerUserKey,MembershipCreateStatus&amp; status)

我认为必须使数据库连接正常,因为身份验证有效。 我做错了什么?

注意到member的Application属性仍设置为Null。如果从配置中读取它,它会预期这是“/”。也许它不是在阅读配置。

刚刚发现如果我添加以下内容就可以了:

config.Add("connectionStringName", "DefaultConnection");

            member.Initialize("DefaultMembershipProvider",config);

但我认为应该从配置文件中提取它。

2 个答案:

答案 0 :(得分:2)

检查web.config中的ApplicationServices的连接字符串。

答案 1 :(得分:0)

您犯的错误是您创建了DefaultMembershipProvider的新实例。

var member = new System.Web.Providers.DefaultMembershipProvider(); 
member.CreateUser("New User", "password", "newUser@newuser.com", "First Pet", "Rover", true, akey, out status)

此新实例不会从您在web.config中指定的配置中读取。这就是为什么你必须初始化这个新实例并为实例提供配置。

相反,您应该直接调用静态类中的方法,如下所示。

Membership.CreateUser("New User", "password", "newUser@newuser.com", "First Pet", "Rover", true, akey, out status);

将自动从web.config加载设置。