Закодированные имена для входа в клиентскую объектную модель SharePoint

Я пишу небольшое экспериментальное консольное приложение .NET, которое выполняет ряд действий в библиотеке документов SharePoint. Я заметил, что следующие методы ожидают «закодированное» имя для входа, то есть имя для входа, включая информацию о провайдере, например. i:0#.w|DOMAIN\user.

context.Web.EnsureUser(encodedLoginName);
context.Web.SiteUsers.GetByLoginName(encodedLoginName);

Как надежно преобразовать имя пользователя, например DOMAIN\user, в этот закодированный формат в клиентской объектной модели SharePoint?

Я прочитал пару из сообщений в блоге, посвященных этой проблеме с помощью SPClaimProviderManager, который недоступен в клиентский API.


person bernhof    schedule 28.01.2014    source источник


Ответы (1)


Я могу получить закодированное имя для входа, используя ResolvePrincipal служебный метод:

using SP = Microsoft.SharePoint.Client;
//...

// resolve user principal using regular login name or e-mail:
var userPrincipal = SP.Utilities.Utility.ResolvePrincipal(
  context, 
  context.Web, 
  "DOMAIN\\user", // normal login name
  SP.Utilities.PrincipalType.User,
  SP.Utilities.PrincipalSource.All,
  context.Web.SiteUsers,
  false);

context.ExecuteQuery();

// ensure that the user principal was resolved:
if (userPrincipal.Value == null)
  throw new Exception("The specified user principal could not be resolved");

// get a User instance based on the encoded login name from userPrincipal
var user = context.Web.SiteUsers.GetByLoginName(userPrincipal.LoginName);
context.Load(user);

context.ExecuteQuery();

Кажется, это работает по назначению. Однако, если есть лучший способ или предостережения, о которых я должен знать, пожалуйста, дайте мне знать.

person bernhof    schedule 28.01.2014
comment
Это сработало для меня только тогда, когда я использовал адрес электронной почты вместо имени для входа (домен\псевдоним) в 3-м аргументе и установил для последнего аргумента значение true вместо false в методе ResolvePrincipal(). - person bittusarkar; 17.04.2014
comment
У моего ClientContext нет context.Web.SiteUsers?. Позволит ли этот метод декодировать токен утверждения в DOMAIN\USER? - person PeterX; 14.05.2015