var requestBody = new User
{
CustomSecurityAttributes = new CustomSecurityAttributeValue
{
AdditionalData = new Dictionary
{
{
"Engineering" , new
{
OdataType = "#Microsoft.DirectoryServices.CustomSecurityAttributeValue",
ProjectDate = "2022-10-01",
}
},
},
},
};
var result = await graphClient.Users["{user-id}"].PatchAsync(requestBody);
Очевидно, это эквивалент C# следующего запроса HTTP PATCH:
Хотя я успешно использовал Graph Explorer и без происшествий выполнил запрос HTTP PATCH для пользовательских атрибутов безопасности, мой код C# не работает. Вместо этого клиент выдает следующую ошибку:
var requestBody = new User
{
CustomSecurityAttributes = new CustomSecurityAttributeValue
{
AdditionalData = new Dictionary
{
{
"SalesforceAccountId" , new
{
ODataType = "#Microsoft.DirectoryServices.CustomSecurityAttributeValue",
Id = accountId,
}
},
},
},
};
await _graphServiceClient.Users[userId].PatchAsync(requestBody);
Мой вопрос: что происходит и как это можно решить? Мне нужно программно добавить значения пользовательских атрибутов безопасности, и, очевидно, клиент службы графов в этом случае ведет себя не так, как предполагалось. Что я делаю не так?
Согласно официальной документации Microsoft, можно присвоить значения настраиваемых атрибутов безопасности, используя следующий код: [code]var requestBody = new User { CustomSecurityAttributes = new CustomSecurityAttributeValue { AdditionalData = new Dictionary { { "Engineering" , new { OdataType = "#Microsoft.DirectoryServices.CustomSecurityAttributeValue", ProjectDate = "2022-10-01", } }, }, }, };
var result = await graphClient.Users["{user-id}"].PatchAsync(requestBody); [/code] Очевидно, это эквивалент C# следующего запроса HTTP PATCH: [code]PATCH https://graph.microsoft.com/v1.0/users/{id} Content-type: application/json
{ "customSecurityAttributes": { "Engineering": { "@odata.type":"#Microsoft.DirectoryServices.CustomSecurityAttributeValue", "ProjectDate":"2022-10-01" } } } [/code] Хотя я успешно использовал Graph Explorer и без происшествий выполнил запрос HTTP PATCH для пользовательских атрибутов безопасности, мой код C# не работает. Вместо этого клиент выдает следующую ошибку: [code]Microsoft.Graph.Beta.Models.ODataErrors.ODataError: Invalid property 'SalesforceAccountId'. at Microsoft.Kiota.Http.HttpClientLibrary.HttpClientRequestAdapter.ThrowIfFailedResponse(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.Beta.Users.Item.UserItemRequestBuilder.PatchAsync(User body, Action`1 requestConfiguration, CancellationToken cancellationToken) at PwsPortal.App.Services.MsGraph.GraphService.AssignAccountIdToUserAsync(String userId, String accountId) in C:\Users\George\source\repos\PwsPortal2\PwsPortal\App\Services\MsGraph\GraphService.cs:line 90 at PwsPortal.Controllers.SalesforceController.AddSecurityAttributeToUserAsync() in C:\Users\George\source\repos\PwsPortal2\PwsPortal\Controllers\SalesforceController.cs:line 105 at lambda_method77(Closure, Object) at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.TaskOfActionResultExecutor.Execute(ActionContext actionContext, 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.Localization.RequestLocalizationMiddleware.Invoke(HttpContext context) at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context) at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context) at Microsoft.AspNetCore.ResponseCompression.ResponseCompressionMiddleware.InvokeCore(HttpContext context) at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddlewareImpl.Invoke(HttpContext context)
*** Headers omitted ***
[/code] Однако, как видите, мой код практически идентичен примеру Microsoft — метод тот же, только набор, имя и значение отличаются: р> [code]var requestBody = new User { CustomSecurityAttributes = new CustomSecurityAttributeValue { AdditionalData = new Dictionary { { "SalesforceAccountId" , new { ODataType = "#Microsoft.DirectoryServices.CustomSecurityAttributeValue", Id = accountId, } }, }, }, }; await _graphServiceClient.Users[userId].PatchAsync(requestBody); [/code] Мой вопрос: что происходит и как это можно решить? Мне нужно программно добавить значения пользовательских атрибутов безопасности, и, очевидно, клиент службы графов в этом случае ведет себя не так, как предполагалось. Что я делаю не так?
Мы создали программное обеспечение для интеграции с Microsoft Teams, используя пакеты Microsoft.Graph от NuGet.
До недавнего времени они работали нормально, хотя Microsoft регулярно обновляла свои пакеты NuGet. У нас не было проблем с...
Я пытаюсь изменить файл Excel SharePoint, добавив данные, созданные в моей программе, в электронную таблицу, размещенную на SharePoint. Мне удалось успешно добавить строку в реальную таблицу, но не с данными.
Проблема заключается в использовании...
Я обновил приложение Microsoft Graph C#/net, чтобы использовать последние версии Microsoft.Graph (версия 5.52.0) и Microsoft.Graph.Core (3.1.11).
С тех пор мне пришлось изменить множество ссылок с «Microsoft.Graph» на «Microsoft.Graph.Models». Пока...
Я хочу получить URL-адрес сайта SharePoint группы M365 с помощью вызова API Graph в консольном приложении C#.
Это можно сделать через Graph Explorer с помощью следующего вызова:
Я хотел бы выполнить это на C#, используя .NET 8.0 с новейшими...
Я хочу получить URL-адрес сайта SharePoint группы M365 с помощью вызова API Graph в консольном приложении C#.
Это можно сделать через Graph Explorer с помощью следующего вызова:
Я хотел бы выполнить это на C#, используя .NET 8.0 с новейшими...