Назначить менеджера с помощью клиентской библиотеки Microsoft Graph .NET
Может кто-нибудь подсказать, как настроить поле User.Manager с помощью клиентской библиотеки Microsoft Graph .NET? Я знаю, как сделать это с помощью прямого вызова REST, но хочу как можно больше избегать этих вызовов (в обход оболочки). С кодом ниже я смог очистить свойство менеджера.
client = new GraphClient(...);
var builder = new DirectoryObjectWithReferenceRequestBuilder(
client.Users["<userid>"].Manager.Request().RequestUrl,client
);
builder.Request().DeleteAsync().Wait()
Однако я все еще не могу понять, какой класс позволяет мне создать запрос PUT для ссылки на член ( как описано здесь). Я попытался следующий код:
var mgr = new DirectoryObject();
mgr.Id = "<Id of the user that should be set as manager>";
var usrPatch = new User();
usrPatch.Manager = mgr;
client.Users["<Id of the user to be updated>"].Request().UpdateAsync(usrPatch).Wait();
Этот код не вызывает исключения, но он также не обновляет менеджер. Запрос неверный. Приведенный выше код отправляет PATCH вместо PUT в "базовый" объект.
Запрос сгенерирован кодом выше:
PATCH https://graph.microsoft.com/v1.0/users/[Id обновляемого пользователя] HTTP/1.1 SdkVersion: graph-dotnet-1.0.1 Тип контента: приложение / JSON Хост: graph.microsoft.com Длина контента: 45 Ожидание: 100- продолжение {"id":"[Идентификатор пользователя, который должен быть установлен в качестве менеджера]"}
Ответ 204.
2 ответа
Я вижу следующее, чтобы удалить менеджера:
graphClient.Users[newUser.Id].Manager.Reference.Request().DeleteAsync();
Но у нас должно быть что-то вроде следующего, чтобы назначить менеджера:
graphClient.Users[newUser.Id].Manager.Reference.Request().AddAsync(manager);
Я сообщу об ошибке и обновлю, когда исправлю.
Два года спустя, и это все еще не работает.
Я получаю следующее исключение при использовании await graphClient.Users[user.Id].Manager.Request().UpdateAsync(usrPatch);
Microsoft.Graph.ServiceException: 'Code: BadRequest
Message: Write requests are only supported on contained entities
Мне пришлось использовать обходную логику Стефбо для обновления менеджера.
Microsoft.Graph DLL Версия 1.12.
Используйте PutAsync(), чтобы установить менеджер с помощью библиотеки графиков: graphClient.Users[user.Id].Manager.Reference.Request().PutAsync(manager.Id);
Обходной путь до обновления "менеджер" полностью поддерживается:
var authToken = "<get your token here>";
var client = new GraphClient(...);
var usrId = "<id of the user to update>"
var mgrId = "<id of the manager>"
var url = client.Users[usrId].Manager.Reference.Request().RequestUrl;
var httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", authToken);
var content = new StringContent(
client.HttpProvider.Serializer.SerializeObject(
new ReferenceRequestBody
{
ODataId =
$"{client.BaseUrl}/directoryObjects/{mgrId}"
}),
Encoding.Default,
"application/json");
var resp = httpClient.PutAsync(url, content).Result;
if (!resp.IsSuccessStatusCode)
{
// throw exception/log etc
}