将 .NET 客户端库的使用迁移到 Microsoft Graph
本文是步骤 3:查看应用迁移过程的应用详细信息的一部分。
如果应用当前使用 Azure Active Directory (Azure AD) Graph 客户端库,请切换到 Microsoft Graph .NET 客户端库。
本文介绍了迁移到 Microsoft Graph .NET 客户端库的以下常规步骤:
- 如何创建 Microsoft Graph 客户端,给定访问令牌 (,可以使用 Azure Active Directory 身份验证库 (ADAL) 或 Microsoft 身份验证库 (MSAL) )
- 如何表述请求
- 如何使用查询生成器
- 如何处理集合和分页
迁移步骤概述
以下步骤假定应用使用 ADAL 获取访问令牌来调用 Azure AD Graph。 切换到 MSAL 可以作为 迁移到 MSAL 中所述的单独步骤完成。
若要获取 Microsoft Graph 的访问令牌,请将 resourceUrl 从
https://graph.windows.net
更新为https://graph.microsoft.com
。在应用中,通过更改以下操作来更新对 Microsoft Graph 客户端库的引用:
using Microsoft.Azure.ActiveDirectory.GraphClient;
收件人:
using Microsoft.Graph;
使用包管理器下载和更新 Microsoft Graph NuGet 包 并更新依赖项。
更新客户端构造函数以创建
GraphServiceClient
,而不是ActiveDirectoryClient
。 以下代码片段假定应用使用AcquireTokenAsyncForUser()
方法获取新令牌。 可以在 active-directory-dotnet-graphapi-console 示例中找到此方法的定义。改变:
ActiveDirectoryClient client = new ActiveDirectoryClient(serviceRoot, async () => await AcquireTokenAsyncForUser());
收件人:
GraphServiceClient graphClient = new GraphServiceClient(serviceRoot, new DelegateAuthenticationProvider(async (requestMessage) => { var token = await AcquireTokenAsyncForUser(); requestMessage.Headers.Authorization = new AuthenticationHeaderValue("bearer", token); }));
对于 Microsoft Graph 客户端库,
serviceRoot
该值还包括版本号。 目前,该值为https://graph.microsoft.com/v1.0
。通过更改以下方法更新请求以使用 Microsoft Graph 客户端请求生成器语法:
signedInUser = (User)await client.Me.ExecuteAsync();
收件人:
signedInUser = (User)await client.Me.Request().GetAsync();
注意
Azure AD Graph 客户端库支持基于 LINQ 的查询语法。 但是,Microsoft Graph 客户端库不会。 因此,需要将相关查询转换为更 RESTful 表达式。
为此,请更改:
var groups = await client.Groups.Where(g => g.DisplayName.StartsWith("a")).ExecuteAsync();
收件人:
var groups = await client.Groups.Request().Filter("startswith(displayName,'a')").GetAsync();
如果代码在集合中分页,请进行以下小调整。 以下示例对提取组和对其成员进行分页(一次 5 个)进行比较和对比。 虽然 Azure AD Graph 的代码需要提取器构造才能提取组的成员,但 Microsoft Graph 没有此类要求。 简言之,仅显示用户成员、try/catch 和错误条件,并且代码片段适用于单线程控制台应用。
例如,使用 Azure AD Graph .NET 客户端库更改以下代码:
Group retrievedGroup = client.Groups. Where(g => g.ObjectId.Equals(id)).ExecuteAsync().Result; IGroupFetcher retrievedGroupFetcher = (IGroupFetcher) retrievedGroup; var membersPage = retrievedGroupFetcher.Members.Take(5).ExecuteAsync().Result; Console.WriteLine(" Members:"); do { List<IDirectoryObject> members = membersPage.CurrentPage.ToList(); foreach (IDirectoryObject member in members) { if (member is User) { User memberUser = (User)member; Console.WriteLine(" User: {0} ", memberUser.DisplayName); } } membersPage = membersPage.GetNextPageAsync().Result; } while (membersPage != null);
使用 Microsoft Graph .NET 客户端库访问以下代码:
var membersPage = client.Groups[id].Members.Request().Top(5).GetAsync().Result; Console.WriteLine(" Members:"); do { List<DirectoryObject> members = membersPage.CurrentPage.ToList(); foreach (DirectoryObject member in members) { if (member is User) { User memberUser = (User)member; Console.WriteLine(" User: {0} ", memberUser.DisplayName); } } if (membersPage.NextPageRequest != null) membersPage = membersPage.NextPageRequest.GetAsync().Result; else membersPage = null; } while (membersPage != null);
生成并修复与名称更改相关的任何资源、属性、导航和服务操作错误。
C# 控制台代码片段应用突出显示了 Microsoft Graph 客户端库和 Azure AD Graph 客户端库之间的更多差异。
Azure AD Graph 客户端库仅支持 .NET 平台。 但是,Microsoft Graph 客户端库支持其他 平台和语言。