2014-02-17 163 views
0

看多经过这么Q/A 我没有以下内容:为什么CustomeMembershipProvider没有被调用?

public class CustomMembershipProvider : SimpleMembershipProvider 
{ 

    public override string CreateUserAndAccount(string userName, string password, IDictionary<string, object> values) 
    { 
    // code to insert data into UserAccounts and UserProfiles tables 
    // using simple sqlconnections 
    } 
} 

数据库表如下:

CREATE TABLE UserAccounts 
(
UserNumericId INT NOT NULL IDENTITY PRIMARY KEY, 
LoginName VARCHAR(10) NOT NULL, 
Password VARCHAR(100) NOT NULL, 
) 
CREATE TABLE UserProfiles 
(
UserNumericId INT NOT NULL PRIMARY KEY, 
DisplayName VARCHAR(100) NOT NULL, 
PrimaryEmail VARCHAR(80) NOT NULL UNIQUE, 
) 

Web配置有

<membership defaultProvider="CustomMembershipProvider"> 
    <providers> 
    <clear/> 
    <add name="CustomMembershipProvider" type="Helpers.CustomMembershipProvider, assembly" /> 
    </providers> 
</membership> 

而且在Global.asax中Lazyinitialzation using

public class SimpleMembershipInitializer 
{ 
    public SimpleMembershipInitializer() 
    { 
     if (!WebSecurity.Initialized) 
      WebSecurity.InitializeDatabaseConnection("ApplicationServices", "UserAccounts", "UserAccountId", "LoginName", autoCreateTables: false); 
    } 
} 

不过,当我从我的注册控制器操作调用下面的语句

WebSecurity.CreateUserAndAccount(model.UserName, model.Password, new { DisplayName= model.DisplayName, PrimaryEmail = model.PrimaryEmail}); 

在我的定义提供断点不会被打到。有人可以帮我吗?

+0

是您CustomMembershpProvider真正的助手命名空间和程序集的名字“集结号”,如图中你的web.config? –

回答

0

您已覆盖SimpleMmebershipProvider中的不正确方法。 CreateUserAndAccount有几种重载方法。如果您查看source code for WebSecurity,您可以看到它调用了此签名 [SimpleMembershipProvider.CreateUserAndAccount Method (String, String, Boolean, IDictionary)]。下面是WebSecurity.CreateUserAndAccount代码:

public static string CreateUserAndAccount(string userName, string password, object propertyValues = null, bool requireConfirmationToken = false) 
    { 
     ExtendedMembershipProvider provider = VerifyProvider(); 
     Debug.Assert(provider != null); // VerifyProvider checks this 

     IDictionary<string, object> values = null; 
     if (propertyValues != null) 
     { 
      values = new RouteValueDictionary(propertyValues); 
     } 

     return provider.CreateUserAndAccount(userName, password, requireConfirmationToken, values); 
    } 
相关问题