无法为自定义的MembershipProvider创建MembershipUser

10

我创建了一个自定义的会员资格提供程序,在尝试创建一个新的“MembershipUser”时遇到以下错误:

无法从程序集'System.Web,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a'中加载类型'MyTestApp.Membership.TestMembershipProvider'。

我是从一个单元测试项目中运行的,所以我不确定是否引起了这个问题,但我确实包括了System.Web、System.Web.ApplicationServices以及对MyApp.Membership和MyApp.DataModels(实体对象)的引用。

错误发生在我的“GetUser”函数内部,该函数如下,我的配置也如下。

public override MembershipUser GetUser(object providerUserKey, bool userIsOnline)
{
    try
    {
        AccountEntities db = new AccountEntities();

        if ((providerUserKey is Guid) == false)
        {
            return null;
        }

        User user = (from u in db.Users
                     where u.UserId == (Guid)providerUserKey
                     && u.Application.LoweredApplicationName == this.ApplicationName.ToLower()
                     select u).FirstOrDefault();

        if (user != null)
        {   // ERROR: Starts here, user object is correct, data is all there.
            return new MembershipUser(this.ProviderName, user.UserName, (object)user.UserId, user.Email, user.PasswordQuestion, user.Comment, user.IsApproved, user.IsLockedOut, user.CreateDate, user.LastLoginDate, user.LastActivityDate, user.LastPasswordChangedDate, user.LastLockoutDate);
        }
        else
            return null;
    }
    catch (Exception ex)
    {
        this.WriteToEventLog(ex, "Unable to get user from object '{" + ((Guid)providerUserKey).ToString() + "}'.", "Get User");
        return null;
    }
}
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <connectionStrings>
    <add name="AccountEntities" connectionString="metadata=res://*/Account.AccountDataModel.csdl|res://*/Account.AccountDataModel.ssdl|res://*/Account.AccountDataModel.msl;provider=System.Data.SqlClient;provider connection string='Data Source=&quotEDITED&quot;;Initial Catalog=CustomAuthentication;Persist Security Info=True;User ID=EDITED;Password=EDITED;MultipleActiveResultSets=True'" providerName="System.Data.EntityClient" />
  </connectionStrings>
  <system.web>
    <membership defaultProvider="TestMembershipProvider" userIsOnlineTimeWindow="15">
      <providers>
        <clear/>
        <add  name="TestMembershipProvider" type="MyTestApp.Membership.TestMembershipProvider"
              applicationName="/"
              description="Membership Test"
              enablePasswordReset="true"
              enablePasswordRetrieval="true"
              maxInvalidPasswordAttempts="3"
              minRequiredNonAlphanumericCharacters="8"
              minRequiredPasswordLength="8"
              passwordAttemptWindow="30"
              requiresQuestionAndAnswer="true"
              requiresUniqueEmail="true" />
      </providers>
    </membership>
  </system.web>
</configuration>
1个回答

22

我刚刚注意到我在配置中错过了以下部分

type="MyTestApp.Membership.TestMembershipProvider, MyTestApp.Membership"

现在可以正常工作!


4
来自未来的点赞。你刚刚帮我节省了约4小时的时间,让我不再为我的安全程序集在MVC项目中正常工作而在Windows Forms项目中无法正常工作而烦恼不已! - Tommy
2
这帮助我解决了一个问题,只花了10分钟的研究时间。如果没有这个,情况会更糟,所以,谢谢! - jason

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接