Я столкнулся с проблемой на нашем сайте: мы получаем ошибку 500 от API Microsoft Graph при использовании пакета Microsoft.Graph версии 5.69.0 Nuget. (https://www.nuget.org/packages/Microsof ... c=template). Вызов пытается получить членство пользователя. Я делаю запрос в каталог Azure B2C.
Здесь возникает следующая ошибка:
Microsoft.Graph.Models.ODataErrors.ODataError: Resource 'memberOf' does not exist or one of its queried reference-property objects are not present.
at Microsoft.Kiota.Http.HttpClientLibrary.HttpClientRequestAdapter.ThrowIfFailedResponseAsync(HttpResponseMessage response, Dictionary`2 errorMapping, Activity activityForAttributes, CancellationToken cancellationToken)
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.MemberOf.MemberOfRequestBuilder.GetAsync(Action`1 requestConfiguration, CancellationToken cancellationToken)
at profile.usafa.org.Controllers.APIController.AzureGroups(String objectId)
at lambda_method189(Closure , Object )
at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.AwaitableObjectResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.g__Awaited|12_0(ControllerActionInvoker invoker, ValueTask`1 actionResultValueTask)
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.g__Awaited|10_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context)
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.g__Awaited|13_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|25_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ResourceExecutedContextSealed context)
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|20_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope)
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope)
at Microsoft.AspNetCore.Routing.EndpointMiddleware.g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger)
at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context)
at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)
at profile.usafa.org.Startup.ProtectStaticFilesMiddleware.Invoke(HttpContext context)
at Microsoft.AspNetCore.Session.SessionMiddleware.Invoke(HttpContext context)
at Microsoft.AspNetCore.Session.SessionMiddleware.Invoke(HttpContext context)
at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)
var graphClient = new GraphServiceClient(clientSecretCredential);
var tempresult = await graphClient.Users[objectId].GetAsync();
DirectoryObjectCollectionResponse result = null;
result = await graphClient.Users[objectId].MemberOf
.GetAsync().;
Вы заметите, что tempresult — это всего лишь тестовый вызов, чтобы убедиться, что я могу вернуть пользователя, не мешая члену, и что этот вызов успешен.
Проверил это с помощью AI, и он дал мне следующее:
Проверить разрешения: убедитесь, что ваше приложение имеет необходимые разрешения для чтения. свойствоmemberOf. Вам потребуются разрешения User.Read.All или Directory.Read.All при регистрации приложения Azure AD. Оба разрешения установлены правильно
Используйте правильную конечную точку API. Убедитесь, что вы используете правильную конечную точку API. СвойствоmemberOf должно быть доступно через конечную точку /users/{id}/memberOf. Вызов абстрагирован, и я не уверен, как это проверить
Обработка пустых результатов: убедитесь, что вы обрабатываете случаи, когда пользователь может не быть членом любые группы. Ошибка возникает во время вызова, а не после возврата результатов.
Я также пробовал использовать Graph Explorer. Однако я не могу протестировать его в своем каталоге B2C, поскольку он не является основным каталогом, и мне не удалось найти способ переключения каталогов, который работал. Мне удалось зарегистрировать пользователя MemberOf в нашем основном каталоге.
Последнее примечание: до этой недели это работало (не знаю, когда это сломалось), но мы не внесли никаких изменений в кодовую базу на этой неделе. Изначально я использовал версию Microsoft.graph 4, когда начал получать эту ошибку, но перешел на последнюю версию, чтобы попытаться решить проблему. В обеих версиях произошла одна и та же ошибка.
Спасибо за любые полезные мысли, которые вы можете высказать.
Я столкнулся с проблемой на нашем сайте: мы получаем ошибку 500 от API Microsoft Graph при использовании пакета Microsoft.Graph версии 5.69.0 Nuget. (https://www.nuget.org/packages/Microsoft.Graph/5.69.0?_src=template). Вызов пытается получить членство пользователя. Я делаю запрос в каталог Azure B2C. Здесь возникает следующая ошибка: [code]Microsoft.Graph.Models.ODataErrors.ODataError: Resource 'memberOf' does not exist or one of its queried reference-property objects are not present. at Microsoft.Kiota.Http.HttpClientLibrary.HttpClientRequestAdapter.ThrowIfFailedResponseAsync(HttpResponseMessage response, Dictionary`2 errorMapping, Activity activityForAttributes, CancellationToken cancellationToken) 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.MemberOf.MemberOfRequestBuilder.GetAsync(Action`1 requestConfiguration, CancellationToken cancellationToken) at profile.usafa.org.Controllers.APIController.AzureGroups(String objectId) at lambda_method189(Closure , Object ) at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.AwaitableObjectResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.g__Awaited|12_0(ControllerActionInvoker invoker, ValueTask`1 actionResultValueTask) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.g__Awaited|10_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.g__Awaited|13_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|25_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ResourceExecutedContextSealed context) at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|20_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope) at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope) at Microsoft.AspNetCore.Routing.EndpointMiddleware.g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger) at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context) at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context) at profile.usafa.org.Startup.ProtectStaticFilesMiddleware.Invoke(HttpContext context) at Microsoft.AspNetCore.Session.SessionMiddleware.Invoke(HttpContext context) at Microsoft.AspNetCore.Session.SessionMiddleware.Invoke(HttpContext context) at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context) [/code] Вот код, который я использую для звонка: [code]var graphClient = new GraphServiceClient(clientSecretCredential);
var tempresult = await graphClient.Users[objectId].GetAsync();
DirectoryObjectCollectionResponse result = null;
result = await graphClient.Users[objectId].MemberOf .GetAsync().; [/code] Вы заметите, что tempresult — это всего лишь тестовый вызов, чтобы убедиться, что я могу вернуть пользователя, не мешая члену, и что этот вызов успешен. Проверил это с помощью AI, и он дал мне следующее: [list] [*]Проверить разрешения: убедитесь, что ваше приложение имеет необходимые разрешения для чтения. свойствоmemberOf. Вам потребуются разрешения User.Read.All или Directory.Read.All при регистрации приложения Azure AD. [b]Оба разрешения установлены правильно[/b] [*]Используйте правильную конечную точку API. Убедитесь, что вы используете правильную конечную точку API. СвойствоmemberOf должно быть доступно через конечную точку /users/{id}/memberOf. [b]Вызов абстрагирован, и я не уверен, как это проверить[/b] [*]Обработка пустых результатов: убедитесь, что вы обрабатываете случаи, когда пользователь может не быть членом любые группы. [b]Ошибка возникает во время вызова, а не после возврата результатов.[/b] [/list] Я также пробовал использовать Graph Explorer. Однако я не могу протестировать его в своем каталоге B2C, поскольку он не является основным каталогом, и мне не удалось найти способ переключения каталогов, который работал. Мне удалось зарегистрировать пользователя MemberOf в нашем основном каталоге. Последнее примечание: до этой недели это работало (не знаю, когда это сломалось), но мы не внесли никаких изменений в кодовую базу на этой неделе. Изначально я использовал версию Microsoft.graph 4, когда начал получать эту ошибку, но перешел на последнюю версию, чтобы попытаться решить проблему. В обеих версиях произошла одна и та же ошибка. Спасибо за любые полезные мысли, которые вы можете высказать.