迁移用于Microsoft Graph 的 .NET 客户端库
本文是 Azure AD 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 中所述的单独步骤完成。
更新资源 URL
若要获取 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 客户端库支持其他 平台和语言。