Невозможно создать команду с нуля через microsoft graph api

Я следую этому документу и пытался создать команду в коде https://docs.microsoft.com/en-us/graph/api/team-post?view=graph-rest-1.0&tabs=csharp%2Chttp. вот мои фрагменты кода:

var scopes = new string[] { "https://graph.microsoft.com/.default" };

            // Configure the MSAL client as a confidential client
            var confidentialClient = ConfidentialClientApplicationBuilder
                .Create(clientId)
                .WithTenantId(tenantId)
                .WithClientSecret(clientSecret)
                .Build();
 GraphServiceClient graphServiceClient =
                new GraphServiceClient(new DelegateAuthenticationProvider(async (requestMessage) =>
                {

                    // Retrieve an access token for Microsoft Graph (gets a fresh token if needed).
                    var authResult = await confidentialClient
                        .AcquireTokenForClient(scopes)
                        .ExecuteAsync();

                    // Add the access token in the Authorization header of the API request.
                    requestMessage.Headers.Authorization =
                        new AuthenticationHeaderValue("Bearer", authResult.AccessToken);
                })
                );

            // Make a Microsoft Graph API call
            var team = new Team
            {
                DisplayName = "My Sample Team",
                Description = "My Sample Team’s Description",
                AdditionalData = new Dictionary<string, object>()
    {
        {"[email protected]", "https://graph.microsoft.com/v1.0/teamsTemplates('standard')"},
        {"[email protected]", "[{\"@odata.type\":\"#microsoft.graph.aadUserConversationMember\",\"roles\":[\"owner\"],\"userId\":\"57d4fc1c-f0a3-1111-b41e-22229f05911c\"}]"}
    }
            };
 GraphServiceClient graphServiceClient =
                new GraphServiceClient(new DelegateAuthenticationProvider(async (requestMessage) =>
                {

                    // Retrieve an access token for Microsoft Graph (gets a fresh token if needed).
                    var authResult = await confidentialClient
                        .AcquireTokenForClient(scopes)
                        .ExecuteAsync();

                    // Add the access token in the Authorization header of the API request.
                    requestMessage.Headers.Authorization =
                        new AuthenticationHeaderValue("Bearer", authResult.AccessToken);
                })
                );

            // Make a Microsoft Graph API call
            var team = new Team
            {
                DisplayName = "My Sample Team",
                Description = "My Sample Team’s Description",
                AdditionalData = new Dictionary<string, object>()
    {
        {"[email protected]", "https://graph.microsoft.com/v1.0/teamsTemplates('standard')"},
        {"[email protected]", "[{\"@odata.type\":\"#microsoft.graph.aadUserConversationMember\",\"roles\":[\"owner\"],\"userId\":\"57d4fc1c-f0a3-4105-b41e-1ba89f05911c\"}]"}
    }
            };

но получите эту ошибку:

 "message": "Bind requests not supported for containment navigation property.",\r\n   

Я использую последнюю Microsoft.Graph библиотеку, ее версия V3.1.8

Есть ли у кого-нибудь идеи по этому поводу или ошибка формата odata?


person Kevin YANG    schedule 20.10.2020    source источник
comment
Можете ли вы поделиться полученным подробным журналом ошибок (идентификатор ответа, временная метка)?   -  person Dev    schedule 20.10.2020
comment
@Dev, просмотрите журнал, как показано ниже: Код: Сообщение BadRequest: Запросы на привязку не поддерживаются для свойства навигации по содержанию. Внутренняя ошибка: AdditionalData: date: 2020-10-20T08: 28: 22 идентификатор запроса: 42a493d8-7068-40b3-b1a8-f238501b2742 идентификатор запроса клиента: 42a493d8-7068-40b3-b1a8-f238501b2742 ClientRequestId: 427068-493d8- 40b3-b1a8-f238501b2742   -  person Kevin YANG    schedule 20.10.2020
comment
@ Дев, у тебя есть какие-нибудь выводы?   -  person Kevin YANG    schedule 21.10.2020


Ответы (1)


Кажется, что [email protected] все еще меняется. В настоящее время это не работает.

Вам нужно использовать свойство members.

POST https://graph.microsoft.com/v1.0/teams

{
  "[email protected]":"https://graph.microsoft.com/v1.0/teamsTemplates('standard')",
  "displayName":"My Sample Team555",
  "description":"My Sample Team’s Description555",
  "members":[
      {
         "@odata.type":"#microsoft.graph.aadUserConversationMember",
         "roles":[
            "owner"
         ],
         "userId":"9xxxxxc9-f062-48e2-8ced-22xxxxx6dfce"
      }
   ]
}

Соответствующий код C # должен быть:

var team = new Team
            {
                DisplayName = "My Sample Team557",
                Description = "My Sample Team’s Description557",
                Members = (ITeamMembersCollectionPage)new List<ConversationMember>()
                {
                    new AadUserConversationMember
                    {
                        Roles = new List<String>()
                        {
                            "owner"
                        },
                        UserId = "9xxxxxc9-f062-48e2-8ced-22xxxxx6dfce"
                    }
                },
                AdditionalData = new Dictionary<string, object>()
                {
                    {"[email protected]", "https://graph.microsoft.com/v1.0/teamsTemplates('standard')"}
                }
            };

К сожалению, когда я запускаю код, он показывает:

System.InvalidCastException: 'Unable to cast object of type 'System.Collections.Generic.List`1[Microsoft.Graph.ConversationMember]' to type 'Microsoft.Graph.ITeamMembersCollectionPage'.'

Я не могу заставить это работать. Обходной путь - использовать httpClient для отправки запроса в вашем коде.

См. Аналогичный вопрос здесь.

ОБНОВЛЕНИЕ:

Я понял это.

Вы можете попробовать следующий код:

        var team = new Team
        {
            DisplayName = "My Sample Team558",
            Description = "My Sample Team’s Description558",
            Members = new TeamMembersCollectionPage() {
                new AadUserConversationMember
                {
                    Roles = new List<String>()
                    {
                        "owner"
                    },
                    UserId = "9xxxxxc9-f062-48e2-8ced-22xxxxx6dfce"
                }
            },
            AdditionalData = new Dictionary<string, object>()
            {
                {"[email protected]", "https://graph.microsoft.com/v1.0/teamsTemplates('standard')"}
            }
        };

Если вы предпочитаете метод httpClient, обратитесь к этому:

        string str = "{\"[email protected]\":\"https://graph.microsoft.com/v1.0/teamsTemplates('standard')\",\"displayName\":\"My Sample Team999\",\"description\":\"My Sample Team’s Description555\",\"members\":[{\"@odata.type\":\"#microsoft.graph.aadUserConversationMember\",\"roles\":[\"owner\"],\"userId\":\"9xxxxxc9-f062-48e2-8ced-22xxxxx6dfce\"}]}";

        var content = new StringContent(str, Encoding.UTF8, "application/json");

        HttpClient client = new HttpClient();
        
        client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
        var response = client.PostAsync("https://graph.microsoft.com/v1.0/teams", content).Result;

ОБНОВЛЕНИЕ 2:

Если вам нужно вызвать его в Postman, используйте такой формат:

{
  "[email protected]":"https://graph.microsoft.com/v1.0/teamsTemplates('standard')",
  "displayName":"My Sample Team555",
  "description":"My Sample Team’s Description555",
  "members":[
      {
         "@odata.type":"#microsoft.graph.aadUserConversationMember",
         "roles":[
            "owner"
         ],
         "userId":"9xxxxxc9-f062-48e2-8ced-22xxxxx6dfce"
      }
   ]
}
person Allen Wu    schedule 20.10.2020
comment
Да, я столкнулся с той же ошибкой при запуске кода. Что касается аналогичного вопроса, я уже пробовал его, но встретил другую недопустимую ошибку - person Kevin YANG; 20.10.2020
comment
Фактически, это была ошибка, когда я отправил запрос через почтальона, используя этот формат данных. - person Kevin YANG; 21.10.2020
comment
@KevinYANG В ответ я обновил образец Postman. Пожалуйста, проверьте. - person Allen Wu; 21.10.2020
comment
с этим обновлением2 я получил эту ошибку: {error: {code: UnknownError, message:, innerError: {date: 2020-10-21T03: 18: 04, request-id: ff889535-7333-4044-b20f-d1618ea45502, client -request-id: ff889535-7333-4044-b20f-d1618ea45502}}} @Allen Wu - person Kevin YANG; 21.10.2020
comment
, и та же ошибка с ним в коде C #. пробовали ли вы это в своем локальном окружении? или мне нужно небольшое изменение в разрешениях api приложения azure add? - person Kevin YANG; 21.10.2020
comment
@KevinYANG Я протестировал код, и он отлично работает. Я с трудом могу сказать, в чем проблема с UnknownError. Можете ли вы попробовать этот метод, чтобы получить graphServiceClient ? ClientCredentialProvider authProvider = new ClientCredentialProvider(confidentialClient); GraphServiceClient graphServiceClient = new GraphServiceClient(authProvider); - person Allen Wu; 21.10.2020
comment
Позвольте нам продолжить это обсуждение в чате. - person Allen Wu; 21.10.2020