使用Microsoft Graph API获取SharePoint Online团队网站

时间:2018-01-07 18:47:18

标签: c# microsoft-graph sharepoint-online

我正在尝试访问组织的SharePoint团队网站。我正在使用Microsoft Graph API,因为它是Office 365最完整的API。我了解如何获取访问令牌以及如何使用它来发出请求。我知道它有效,因为我可以获得一个组列表,但是当涉及到获取所有团队网站时,我收到一条错误消息:

Code : invalidRequest    
Message : Cannot enumerate sites

这是我的代码。我正在控制台应用程序中测试它。

class Program {
    static void Main(string[] args) {
        Program p = new Program();
        var items = p.GetItems();
        items.Wait();
        foreach (var item in items.Result) {
            Console.WriteLine(item.DisplayName);
        }

        Console.ReadLine();
    }

    public async Task<IGraphServiceSitesCollectionPage> GetItems() {
        PublicClientApplication myApp =
            new PublicClientApplication("CLIENT-ID-FROM-DEVELOPPER-CONSOLE");

        //Gets an access token
        AuthenticationResult authenticationResult =
            await myApp.AcquireTokenAsync(
                new string[] {
                    "user.read.all",
                    "sites.read.all",
                    "files.read.all",
                    "group.read.all",
                    "Directory.Read.All"
                }).ConfigureAwait(false);

        //Creates the client with the access token
        GraphServiceClient graphClient = new GraphServiceClient(
            new DelegateAuthenticationProvider(
                async(requestMessage) => {
                    // Append the access token to the request.
                    requestMessage.Headers.Authorization =
                        new AuthenticationHeaderValue("bearer",
                            authenticationResult.AccessToken);
                }));

        //Requests the site objects
        var sites = await graphClient.Sites.Request().GetAsync();

        return sites;
    }
}

我搜索了很多内容,但只找到了对我不起作用的解决方案。

1 个答案:

答案 0 :(得分:2)

错误消息可让您准确描述无法使用的原因。

graphClient.Sites.Request().GetAsync()的调用被转换为HTTP调用https://graph.microsoft.com/sites,该调用不是有效的API端点。

您需要提供一些其他背景信息,例如您正在寻找的site。例如,要获取根站点,您可以调用:

graphClient.Sites["root"].Request().GetAsync();

如果您正在寻找团队网站,您可以使用该网站的路径:

await graphClient.Sites["root"].SiteWithPath("/teams/myawesometeam").Request().GetAsync();

有关其他SharePoint端点,请参阅Graph SharePoint documentation