2

The top function is returning a membership user while the second one does not. I've passed in the username for a user for whom the top function gets a result but the second just returns null. Any suggestions to get user based on username?

public static MembershipUser getCCUser(Guid UserID)
{
   return ((MembershipProvider)Membership.Providers["CC_MembershipProvider"]).GetUser(UserID, false);
}

public static MembershipUser getCCUser(string userName)
{
   return ((MembershipProvider)Membership.Providers["CC_MembershipProvider"]).GetUser(userName, false);
}
4

3 に答える 3

5

The applicationNames in the web.config should match the application name in aspnet_Applications table

于 2015-05-14T17:45:48.583 に答える
2

何が本当に問題を引き起こしているのかを見つけました。最近、メンバーシップの他のアプリケーションと競合しないように、アプリケーション名を変更しました。web.configファイルのメンバーシップセクションでアプリケーション名を更新するのを忘れていました。

Web.config(簡潔にするために省略):

<membership>
      <providers>
        <clear/>
        <add name="AA_MembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="AA_MEMBERSHIP" applicationName="/"/>
        <add name="CC_MembershipProvider" applicationName="/"/>
      </providers>
</membership>

読むべきだった:

<membership>
      <providers>
        <clear/>
        <add name="AA_MembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="AA_MEMBERSHIP" applicationName="/"/>
        <add name="CC_MembershipProvider" applicationName="CCPortal"/>
      </providers>
</membership>

ここでの興味深いポイントは、GuidベースのユーザーIDを使用しているときにユーザーを見つけたということですが、文字列のユーザー名に基づいてユーザーを探すときは、メンバーシップに適切なアプリケーションスコープが必要です。

于 2013-02-07T01:05:04.787 に答える
0

Ok. So this is only one possible way but basically I just did the look up using Entity Framework. I'm still open to suggestions.

public static MembershipProvider CCMembershipProvider
{
    get
    {
        return ((MembershipProvider)Membership.Providers["CC_MembershipProvider"]);
    }
}

public static MembershipUser getCCUser(Guid UserID)
{
    return CCMembershipProvider.GetUser(UserID, false);
}

public static MembershipUser getCCUser(string userName)
{
    //This function is BS.  For some reason userName always gets null.  Unfortunately UsersInRole only gives a string[]
    //Soo... Here is the jenky workaround...
    userName = userName.ToLower();

    CCPortal.MEMBERSHIPEntities context = new CC.MEMBERSHIPEntities();

    CCPortal.aspnet_Users user = context.aspnet_Users.SingleOrDefault(u => u.LoweredUserName == userName);

    return getCCUser(user.UserId);
    //This is what We should be using....
    //return CCMembershipProvider.GetUser(userName, false);
}
于 2013-02-04T23:30:44.593 に答える