使用 SDK 查询 Microsoft Graph

已完成

Microsoft Graph SDK 设计用来简化可访问 Microsoft Graph 的优质、高效且可复原的应用程序的构建。 SDK 包含两个组件:服务库和核心库。

服务库包含根据 Microsoft Graph 元数据生成的模型和请求生成器,以提供丰富的可发现体验。

核心库提供了一组功能,可增强与所有 Microsoft Graph 服务的协作。 重试处理、安全重定向、透明身份验证和有效负载压缩的嵌入式支持可提高应用程序与 Microsoft Graph 的交互质量,而不会增加复杂性,让你可以完全掌控。 核心库还提供对常见任务(例如,浏览集合和创建批处理请求)的支持。

在本单元中,你将了解可用的 SDK,并看到一些最常见操作的部分代码示例。

注意

本单元中的代码示例基于 Microsoft Graph .NET SDK 的版本 5.65。

安装 Microsoft Graph .NET SDK

Microsoft Graph .NET SDK 包含在以下 NuGet 包中:

  • Microsoft.Graph - 包含用于通过 Fluent API 访问 v1.0 终结点的模型和请求生成器。 Microsoft.Graph 具有对 Microsoft.Graph.Core 的依赖项。
  • Microsoft.Graph.Beta - 包含用于通过 Fluent API 访问 beta 终结点的模型和请求生成器。 Microsoft.Graph.Beta 具有对 Microsoft.Graph.Core 的依赖项。
  • Microsoft.Graph.Core - 用于调用 Microsoft Graph 的核心库。

创建 Microsoft Graph 客户端

Microsoft Graph 客户端旨在使调用 Microsoft Graph 的过程更加简单。 可以在应用程序的生存期内使用单个客户端实例。 下面的代码示例演示如何创建 Microsoft Graph 客户端的实例。 身份验证提供程序为应用程序处理访问令牌的获取。 不同的应用程序提供程序支持不同的客户端场景。 若要详细了解适用于你的应用场景的提供程序和选项,请参阅选择身份验证提供程序

var scopes = new[] { "User.Read" };

// Multi-tenant apps can use "common",
// single-tenant apps must use the tenant ID from the Azure portal
var tenantId = "common";

// Value from app registration
var clientId = "YOUR_CLIENT_ID";

// using Azure.Identity;
var options = new TokenCredentialOptions
{
    AuthorityHost = AzureAuthorityHosts.AzurePublicCloud
};

// Callback function that receives the user prompt
// Prompt contains the generated device code that you must
// enter during the auth process in the browser
Func<DeviceCodeInfo, CancellationToken, Task> callback = (code, cancellation) => {
    Console.WriteLine(code.Message);
    return Task.FromResult(0);
};

// /dotnet/api/azure.identity.devicecodecredential
var deviceCodeCredential = new DeviceCodeCredential(
    callback, tenantId, clientId, options);

var graphClient = new GraphServiceClient(deviceCodeCredential, scopes);

从 Microsoft Graph 读取信息

若要从 Microsoft Graph 读取信息,首先需要创建一个请求对象,然后对请求运行 GET 方法。

// GET https://graph.microsoft.com/v1.0/me

var user = await graphClient.Me
    .GetAsync();

检索实体列表

检索实体列表与检索单个实体类似,只是在配置请求时有其他选项。 可以使用 $filter 查询参数将结果集减少到与所提供的条件匹配的行数。 $orderBy 查询参数请求服务器提供按指定属性排序的实体列表。

// GET https://graph.microsoft.com/v1.0/me/messages?
// $select=subject,sender&$filter=subject eq 'Hello world'
var messages = await graphClient.Me.Messages
    .GetAsync(requestConfig =>
    {
        requestConfig.QueryParameters.Select =
            ["subject", "sender"];
        requestConfig.QueryParameters.Filter =
            "subject eq 'Hello world'";
    });

删除条目

按照请求检索实体相同的方式来构造删除请求,但使用 DELETE 请求替代 GET

// DELETE https://graph.microsoft.com/v1.0/me/messages/{message-id}
// messageId is a string containing the id property of the message
await graphClient.Me.Messages[messageId]
    .DeleteAsync();

创建新实体

对于流畅样式和基于模板的 SDK,可以使用 POST 方法将新项添加到集合中。

// POST https://graph.microsoft.com/v1.0/me/calendars
var calendar = new Calendar
{
    Name = "Volunteer",
};

var newCalendar = await graphClient.Me.Calendars
    .PostAsync(calendar);

其他资源