0

Попытка создать пользовательскую проверку пользователя следующим образом:Что происходит, когда вы вызываете UserPrincipal.Current.GivenName из учетной записи без AD?

currentSessionUser = new User() //Nope, lets pull information from the Active Directory 
{ 
    FirstName = UserPrincipal.Current.GivenName, 
    LastName = UserPrincipal.Current.Surname, 
    Username = UserPrincipal.Current.SamAccountName, 
    AccountState = 0 
}; 

Что происходит, когда клиент не является AD счета или, скажем, мобильное устройство?

Как уловить ошибки здесь?

+0

Свойство «Current» принимает текущий SID пользователя из процесса \ нити лексем и запрашивать информацию из AD с помощью протокола LDAP в случае учетной записи AD или с локального компьютера, используя протокол WinNT, если это локальная учетная запись. Если SID учетной записи не может быть найден, он выдает NoMatchingPrincipalException. Если информация SID не может быть восстановлена, функция будет вызывать исключение PrincipalOperationException. У меня есть сомнения в том, что S.DS.AM поддерживается на мобильных устройствах (даже на телефоне Windows) – oldovets

+0

Так что проверка нулевых значений в текущем свойстве будет лучшим способом обработки не AD-устройств? Я не слишком разбираюсь в том, что я действительно занимаюсь мобильными устройствами - за исключением устройств, которые не могут быть аутентифицированы простой проверкой имени пользователя. – Bitz

+0

Я могу только утверждать, что если вы запустите процесс под локальной учетной записью на компьютере под управлением Windows и вызовите свойство «Current», то большинство значений будут иметь нулевые значения (UserPrincipal.Current.SamAccountName будет установлено) – oldovets

ответ

0

Чтобы правильно поймать исключение, которое может быть thrown- PrincipalServerDownException Вам просто нужно инкапсулировать область, которая пытается запросить UserPrincipal в водосборный блоке для вышеупомянутого типа исключения.

try 
    { 
     u = new User 
     { 
      FirstName = UserPrincipal.Current.GivenName, 
      LastName = UserPrincipal.Current.Surname, 
      Username = UserPrincipal.Current.SamAccountName, 
      Guid = UserPrincipal.Current.Guid.ToString(), 
      CanEditHidData = true, 
      CanEditQaData = true, 
      AccountState = 0 //0=Unlocked 1=HigherPrivs Privs 2=Locked 
     }; 
     return u; 
    } 
    catch (PrincipalServerDownException e) 
    { 
     u = new User 
     { 
      FirstName = "Guest", 
      LastName = "Account", 
      Username = "guest", 
      Guid = Guid.Empty.ToString(), 
      CanEditHidData = false, 
      CanEditQaData = false, 
      AccountState = 3 //0=Unlocked 1=HigherPrivs Privs 2=Locked 3=Guest 
     }; 
     ViewBag.ErrorMessage = e.Message; 
     View("Error"); 
     return u; 
    } 
Смежные вопросы