Не може да се създаде екип от нулата чрез API на microsoft graph

Следя този документ и се опитах да създам екип в кода 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
Можете ли да споделите подробния регистър на грешките, който сте получили (id на отговора, клеймо за време)?   -  person Dev    schedule 20.10.2020
comment
@Dev, моля, вижте регистрационния файл по-долу: Код: BadRequest Съобщение: Заявките за обвързване не се поддържат за свойство за навигация на ограничаване. Вътрешна грешка: AdditionalData: дата: 2020-10-20T08:28:22 request-id: 42a493d8-7068-40b3-b1a8-f238501b2742 client-request-id: 42a493d8-7068-40b3-b1a8-f238501b2742 ClientRequestId: 42-a7063-82a7068 40b3-b1a8-f238501b2742   -  person Kevin YANG    schedule 20.10.2020
comment
@Dev имаш ли някакви открития?   -  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 получих тази грешка:{ грешка: { код: UnknownError, съобщение: , innerError: { дата: 2020-10-21T03:18:04, идентификатор на заявка: ff889535-7333-4044-b20f-d1618ea45502, клиент -request-id: ff889535-7333-4044-b20f-d1618ea45502 } } }@Allen Wu - person Kevin YANG; 21.10.2020
comment
, и същата грешка с него в кода на C#. Опитвали ли сте го в локалната си среда? Или трябва да имам нужда от малка промяна в разрешенията за api на приложение за добавяне на azure? - 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