Не совсем уверен, как устранить эту ошибку, поскольку она не конкретна, когда я улавливаю сообщение об ошибке.
Microsoft.Graph.Models.ODataErrors.ODataError: Exception of type 'Microsoft.Graph.Models.ODataErrors.ODataError' was thrown.
at Microsoft.Kiota.Http.HttpClientLibrary.HttpClientRequestAdapter.ThrowIfFailedResponse(HttpResponseMessage response, Dictionary`2 errorMapping, Activity activityForAttributes)
at Microsoft.Kiota.Http.HttpClientLibrary.HttpClientRequestAdapter.SendAsync[ModelType](RequestInformation requestInfo, ParsableFactory`1 factory, Dictionary`2 errorMapping, CancellationToken cancellationToken)
at Microsoft.Kiota.Http.HttpClientLibrary.HttpClientRequestAdapter.SendAsync[ModelType](RequestInformation requestInfo, ParsableFactory`1 factory, Dictionary`2 errorMapping, CancellationToken cancellationToken)
at Microsoft.Graph.Users.Item.UserItemRequestBuilder.PatchAsync(User body, Action`1 requestConfiguration, CancellationToken cancellationToken)
В частности, возникает ошибка в этой строке:
await graphClient.Users[$"{id}"].PatchAsync(user);
Для получения дополнительной информации я пытаюсь обновить пользователей onPremisesExtensionAttributes.
В другом методе я создаю их вот так
var user = new User
{
OnPremisesExtensionAttributes = new OnPremisesExtensionAttributes
{
ExtensionAttribute1 = "123"
ExtensionAttribute2 = "abc"
}
};
Все правильно согласно документации Microsoft. Я не совсем уверен, как поступить с этим, я потратил 2 часа на чтение об этом, но ничего не исправило. Все работало, пока мне не было поручено вернуться к этому проекту и обновить все зависимости. Однако, согласно документации, именно так вы должны исправить пользователя с помощью Graph SDK v5.
Любая помощь очень ценится





Когда я запустил приведенный ниже код, включив метод try-catch, я получил ту же ошибку с Insufficient privileges в консоли, например:
using Azure.Identity;
using Microsoft.Graph;
using Microsoft.Graph.Models;
using Microsoft.Graph.Models.ODataErrors;
var scopes = new[] { "https://graph.microsoft.com/.default" };
var clientId = "appId";
var tenantId = "tenantId";
var clientSecret = "secret";
var options = new ClientSecretCredentialOptions
{
AuthorityHost = AzureAuthorityHosts.AzurePublicCloud,
};
var clientSecretCredential = new ClientSecretCredential(
tenantId, clientId, clientSecret, options);
var graphClient = new GraphServiceClient(clientSecretCredential, scopes);
var user = new User
{
OnPremisesExtensionAttributes = new OnPremisesExtensionAttributes
{
ExtensionAttribute1 = "123",
ExtensionAttribute2 = "abc"
}
};
try
{
await graphClient.Users["b3235d2e-19bc-4b2b-a8ef-xxxxxxx"].PatchAsync(user);
Console.WriteLine("Extension attributes updated successfully");
}
catch (ODataError odataError)
{
Console.WriteLine(odataError.Error.Code);
Console.WriteLine(odataError.Error.Message);
throw;
}
Ответ:

Чтобы устранить ошибку, я добавил User.ReadWrite.All разрешение типа приложения в приложение, предоставив согласие администратора:

Когда я снова запустил тот же код, я получил такой ответ:
using Azure.Identity;
using Microsoft.Graph;
using Microsoft.Graph.Models;
using Microsoft.Graph.Models.ODataErrors;
var scopes = new[] { "https://graph.microsoft.com/.default" };
var clientId = "appId";
var tenantId = "tenantId";
var clientSecret = "secret";
var options = new ClientSecretCredentialOptions
{
AuthorityHost = AzureAuthorityHosts.AzurePublicCloud,
};
var clientSecretCredential = new ClientSecretCredential(
tenantId, clientId, clientSecret, options);
var graphClient = new GraphServiceClient(clientSecretCredential, scopes);
var user = new User
{
OnPremisesExtensionAttributes = new OnPremisesExtensionAttributes
{
ExtensionAttribute1 = "123",
ExtensionAttribute2 = "abc"
}
};
try
{
await graphClient.Users["b3235d2e-19bc-4b2b-a8ef-xxxxxxx"].PatchAsync(user);
Console.WriteLine("Extension attributes updated successfully");
}
catch (ODataError odataError)
{
Console.WriteLine(odataError.Error.Code);
Console.WriteLine(odataError.Error.Message);
throw;
}
Ответ:

Чтобы убедиться в этом, я проверил то же самое на портале, где атрибуты расширения пользователя обновляются, как показано ниже:

Спасибо, перехват OData действительно дал мне правильный код ошибки, и это действительно была проблема с разрешением. У меня все еще возникают проблемы с разрешениями, поскольку я использую VisualStudioCredential и пытаюсь внести эти изменения в тестовом домене. Странно то, что я предоставил правильные разрешения учетной записи для внесения этих изменений, но по какой-то причине они все еще не работают. Наверное, радость от посещения проекта, над которым не работали уже много месяцев!
Используйте метод try-catch в своем коде, чтобы узнать точную ошибку OData, включив код из этого.