Когда FBA настроен для SharePoint 2010, в файле web.config
определяются два поставщика членства - Microsoft.SharePoint.Administration.Claims.SPClaimsAuthMembershipProvider
(обычно именуемые i ) и System.Web.Security.SqlMembershipProvider
(именуемые FBAMembership в этом случае).Поставщик членства по умолчанию должен быть установлен на прежний (т. Е. SharePoint требует один), чтобы аутентификация FBA работала правильно.
При выполнении строки, содержащей Membership.GetUserNameByEmail(...)
, используется поставщик членства по умолчанию, и в результатеSPClaimsAuthMembershipProvider.GetUserNameByEmail
называется. MSDN говорит, что этот метод зарезервирован для внутреннего использования и не предназначен для использования непосредственно из вашего кода , и согласно комментарию в разделе Содержимое сообщества throws 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.");