我正在使用新的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);
但我认为应该从配置文件中提取它。
答案 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加载设置。