2011-07-10 29 views
2

我使用的是新的ASP.NET通用提供商在此Hanselman blog post comment描述:错误当创建用户 - ASP.NET System.Web.Providers

我能得到它的有线起来使用以下验证:

<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","[email protected]","First Pet","Rover",true,akey,out status) 

我得到一个错误,这个堆栈跟踪:

对象未设置在System.Web.Providers.Entities.ModelHelper.CreateEntityConnection对象 的实例(ConnectionStringSettings设置,字符串CSDL, String sdl,String msl) at System.Web.Providers.Entities.ModelHelper.CreateMembershipEntities(ConnectionStringSettings setting) at System.Web.Providers.DefaultMembershipProvider.Membership_CreateUser(String applicationName,String userName,String password,String salt,String email, String passwordQuestion,String passwordAnswer,Boolean isApproved,DateTime(字符串用户名,字符串密码,字符串电子邮件,字符串passwordQuestion,字符串passwordAnswer,布尔isApproved,对象providerUserKey,MembershipCreateStatus & status)3210 createDate,Boolean uniqueEmail,Int32 passwordFormat,Object & providerUserKey) at System.Web.Providers.DefaultMembershipProvider.CreateUser

我认为它必须使数据库连接正常,因为身份验证的作品。 我在做什么错?

只注意到成员的应用程序属性仍设置为空。如果正在从配置中读取它,会预期这是“/”。也许它没有读取配置。

就发现,如果我添加了以下工作原理:

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

      member.Initialize("DefaultMembershipProvider",config); 

但我会一直认为应该把它捡起来从配置文件。

+0

不错的地方。但只是尝试它在配置中设置为True,但仍然无效。 –

+0

只是注意到,成员的应用程序属性仍然设置为空 –

+0

我不知道斜线是否足够(作为给定的输入)的有效字符串。你用字做了吗? –

回答

2

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

+0

你的意思是System.Web ConnectionStrings中的值吗?似乎没问题,因为这是用于身份验证的连接字符串。 –

+0

刚刚发现,如果我添加这个 config.Add(“connectionStringName”,“DefaultConnection”); 它的工作原理。 –

0

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

var member = new System.Web.Providers.DefaultMembershipProvider(); 
member.CreateUser("New User", "password", "[email protected]", "First Pet", "Rover", true, akey, out status) 

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

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

Membership.CreateUser("New User", "password", "[email protected]", "First Pet", "Rover", true, akey, out status); 

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