Membership.GetUser () используя Guid - PullRequest
3 голосов
/ 20 декабря 2011

Я обнаружил Membership.GetUser (), но не похоже, что он поддерживает получение информации о пользователе с помощью Guid UserId.У кого-нибудь есть хороший и чистый способ сделать это?

public MembershipUser User { // get...;set...;}

мой код здесь не работает ...

User = Membership.GetUser(dr.GetValue(dr.GetOrdinal("Id"))); //fail

сообщение об ошибке: specified method is not supported

Ответы [ 5 ]

2 голосов
/ 23 декабря 2011
  • Guid.Parse() и Guid.TryParse() доступны только в .NET 4.
  • Вы не можете разыграть string (предполагая, что это то, что возвращается с dr.GetValue() до Guid

Так что попробуйте это вместо:

MembershipUser m = Membership.GetUser(new Guid(
  dr.GetValue(dr.GetOrdinal("Id"))
));
0 голосов
/ 07 апреля 2013

Примечание для будущих читателей:

SimpleMembershipProvider не реализует метод Membership.GetUser(object providerUserKey) http://msdn.microsoft.com/en-us/library/gg569140(v=vs.111).aspx

0 голосов
/ 07 марта 2012

Проверьте настройки провайдера членства в файле web.config или app.config

например

<system.web>
  <membership>
    <providers>
      <clear/>
      <add name="AspNetSqlMembershipProvider" connectionStringName="LocalSqlServer" .../>
    </providers>
  </membership>
</system.web>
0 голосов
/ 20 декабря 2011

Согласно тому, что я вижу, базовый класс MembershipProvider имеет метод GetUser(), перегруженный сигнатурами:

GetUser(providerUserKey As Object, userIsOnline As Boolean)

и

GetUser(username As String, userIsOnline As Boolean)

Итак ... может быть, вы скучаете по Булеву? Может отличаться в зависимости от того, какого провайдера вы используете. Похоже, что это верно для SqlMembershipProvider.

http://msdn.microsoft.com/en-us/library/system.web.security.sqlmembershipprovider.aspx

Конечно, это стоит того:

User = Membership.GetUser(dr.GetValue(dr.GetOrdinal("Id")), false); //(!fail)?
0 голосов
/ 20 декабря 2011

Вы можете перебрать Membership.GetAllUsers() и сопоставить ProviderUserKey, возможно, но @SLaks верен, ASP использует числовые идентификаторы.

foreach (var user in Membership.GetAllUsers())
{
  if ((Guid)user.ProviderUserKey == myguid)
    return user;
}

EDIT Как указал @MystereMan, существует перегрузка для GetUser , которая принимает Guid:

public static MembershipUser GetUser(  
  Object providerUserKey  
)

Попробуйте привести ваш dr результат к данным Guidвведите, а затем передайте его методу GetUser (я думаю, что результат обратно недействителен или не может быть приведен).

Guid userId = Guid.Parse(dr.GetValue(dr.GetOrdinal("Id"));
MembershipUser = Membership.GetUser(userId);
...