API Graph для C#: результат BadGateway при попытке создать команду в Office 365 - PullRequest
1 голос
/ 18 апреля 2020

Я пару дней работал над решением, которое создает группу и группы с семейством сайтов в SharePoint. Я получил несколько сообщений об ошибках, связанных с BadGateway, когда я пытался создать новую группу в группу.

Этот код вызывает исключение:

 var team = new Team
                {
                    MemberSettings = new TeamMemberSettings
                    {
                        AllowCreateUpdateChannels = true
                    },
                    MessagingSettings = new TeamMessagingSettings
                    {
                        AllowUserEditMessages = true,
                        AllowUserDeleteMessages = true
                    },
                    FunSettings = new TeamFunSettings
                    {
                        AllowGiphy = true,
                        GiphyContentRating = GiphyRatingType.Strict
                    }
                };

                await graphClient.Groups[groupid].Team
                    .Request()
                    .PutAsync(team);

Выдается исключение: :

Code: BadGateway
Message: Failed to execute backend request.
Inner error:
    AdditionalData:
    request-id: a3ecc097-6969-4263-84dd-e6c3fd60bd03
    date: 2020-04-18T13:02:43
ClientRequestId: a3ecc097-6969-4263-84dd-e6c3fd60bd03

Еще несколько комментариев:

  1. Выполняется пользователь, являющийся администратором семейства сайтов (когда этот объект инициализируется)
var authManager = new OfficeDevPnP.Core.AuthenticationManager();
            ClientContext context = authManager.GetSharePointOnlineAuthenticatedContextTenant(AdminSiteUrl, username, pwd); 

Идентификатор клиента и регистрация приложения в Azure имеют следующие разрешения: App registrated permissions in Azure Active Directory

Версия especifi c Я использую для объявления объекта Team сборку Microsoft.Graph, версия = 3.3.0.0 с использованием Nuget. У меня та же проблема, когда я использую 3.2.0.0

Я знаю, что можно выполнить тот же метод напрямую, используя REST API, но я не уверен, что эта новая версия (выпустила некоторые дней go имеет ошибку). Итак, я хотел бы знать, как исправить эту ошибку или если я должен перейти с использованием REST API напрямую (если у вас есть пример кода, это было бы здорово !!). Спасибо!

Ответы [ 2 ]

0 голосов
/ 19 апреля 2020

Я использую Graph API SDK 3.1.0. Попробуйте установить ODataType = null в объектах команды

            var team = new GraphApi.Team
            {      
                MemberSettings = new GraphApi.TeamMemberSettings
                {
                    AllowCreateUpdateChannels = true,
                    ODataType = null
                },
                MessagingSettings = new GraphApi.TeamMessagingSettings
                {
                    AllowUserEditMessages = true,
                    AllowUserDeleteMessages = true,
                    ODataType = null
                },
                FunSettings = new GraphApi.TeamFunSettings
                {
                    AllowGiphy = true,
                    GiphyContentRating = GraphApi.GiphyRatingType.Strict,
                    ODataType = null
                },
                ODataType = null
            };
0 голосов
/ 19 апреля 2020

Это полный код:

string ClassSiteUrl = "https://***********.sharepoint.com/sites/*******";
string AdminSiteUrl = "https://************-admin.sharepoint.com";

string clientId = "*********************"; //e.g. 01e54f9a-81bc-4dee-b15d-e661ae13f382
string clientSecret = @"*********************";
string tenantID = "*********************";

var pwd = "*********************";
var username = "*********************";

var authManager = new OfficeDevPnP.Core.AuthenticationManager();
ClientContext context = authManager.GetSharePointOnlineAuthenticatedContextTenant(AdminSiteUrl, username, pwd);
Tenant tenant = new Tenant(context);

GroupCreationParams optionalParams = new GroupCreationParams(tenant.Context);
optionalParams.Description = "description";
optionalParams.CreationOptions = new string[] { "SharePointKeepOldHomepage" };

tenant.CreateGroupForSite(ClassSiteUrl, "*********************", "*********************", true, optionalParams);
context.ExecuteQuery();

//get group id
ClientContext classicalsitectx = authManager.GetSharePointOnlineAuthenticatedContextTenant(ClassSiteUrl, username, pwd);
classicalsitectx.Load(classicalsitectx.Site);
classicalsitectx.ExecuteQuery();
var groupid = classicalsitectx.Site.GroupId.ToString(); 

// Link group to a team
IConfidentialClientApplication confidentialClientApplication = ConfidentialClientApplicationBuilder
    .Create(clientId)
    .WithTenantId(tenantID)
    .WithClientSecret(clientSecret)
    .Build();

ClientCredentialProvider authProvider = new ClientCredentialProvider(confidentialClientApplication);
GraphServiceClient graphClient = new GraphServiceClient(authProvider);

try
{

    var team = new Team
    {
        MemberSettings = new TeamMemberSettings
        {
            AllowCreateUpdateChannels = true
        },
        MessagingSettings = new TeamMessagingSettings
        {
            AllowUserEditMessages = true,
            AllowUserDeleteMessages = true
        },
        FunSettings = new TeamFunSettings
        {
            AllowGiphy = true,
            GiphyContentRating = GiphyRatingType.Strict
        },
        ODataType = null
    };

    await graphClient.Groups[groupid].Team
        .Request()
        .PutAsync(team);
}
catch (ServiceException e)
{
    Console.WriteLine("This program is expected to throw WebException on successful run." +
                        "\n\nException Message :" + e.Message);
}
catch (Exception ex)
{

    Console.WriteLine("This program is expected to throw WebException on successful run." +
                       "\n\nException Message :" + ex.Message);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...