为 SharePoint 2010 配置 FBA 时,文件中定义了两个成员资格提供程序web.config
- Microsoft.SharePoint.Administration.Claims.SPClaimsAuthMembershipProvider
(通常名为i)和System.Web.Security.SqlMembershipProvider
(在本例中名为FBAMembership)。默认成员资格提供程序必须设置为前者(即 SharePoint 声明之一),FBA 身份验证才能正常工作。
执行包含的行时Membership.GetUserNameByEmail(...)
,将使用默认的成员资格提供程序并因此SPClaimsAuthMembershipProvider.GetUserNameByEmail
被调用。MSDN表示,此方法保留供内部使用,不打算直接从您的代码中使用,并且根据它抛出的社区内容NotImplementedException
部分中的注释。
您需要SqlMembershipProvider
从Membership.Providers
集合中检索提供者的一个实例,然后GetUserNameByEmail
使用该实例调用该方法。
我在文件中配置提供程序时使用前缀,web.config
并像这样检索它们:
string applicationNamePrefix = "fbaProvider_";
MembershipProvider fbaProvider;
foreach (MembershipProvider provider in Membership.Providers)
{
if (provider.ApplicationName.StartsWith(applicationNamePrefix, StringComparison.InvariantCultureIgnoreCase))
{
fbaProvider = provider;
}
}
throw new InvalidOperationException("Appropriate provider was not found.");