涉及 externalUserState C# 的 Microsoft Graph API 查询
Microsoft Graph API query involving externalUserState C#
您好,我正在尝试编写一个简单的控制台应用程序,我打算将其制作成批处理文件,并获取通过电子邮件邀请的外部用户列表,现在他们在我们的 Azure 租户中拥有来宾帐户,他们已兑换通过电子邮件发送给他们的 url。当他们兑换时,他们的 extenalUserState 设置为 "Accepted"。我想找出哪些具有该状态。
我被告知我必须指向 API 的 beta 版本,而不是图形端点的 v.1.0。
我编写了以下基本代码,查看了我可以在 GitHub/MS 文档中为 API 等找到的各种示例。
using Microsoft.Graph;
using Microsoft.IdentityModel.Clients.ActiveDirectory;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
namespace CreateAzureADUser
{
class Program
{
static string TenantDomain;
static string TenantId;
static string ClientId;
static string ClientSecret;
static void Main(string[] args)
{
GetUsers();
//Console.WriteLine("------------------------------------------\n\n");
//GetGroupsAndMembers();
//CreateAzureADUserNow();
}
private static void GetUsers()
{
var graphServiceClient = CreateGraphServiceClient();
var users = graphServiceClient.Users.Request().Filter("userType eq 'Guest' and startswith(mail,'phs')")
.Select("id,mail,OnPremisesExtensionAttributes,userType,displayName,externalUserState")
.GetAsync()
.Result;
Console.WriteLine("Users found: {0}", users.Count);
Console.WriteLine();
foreach (var item in users)
{
Console.WriteLine("displayName: {3} \nuser id: {0} \nuser email: {1} \nExtensionAttribute8: {2}\n", item.Id, item.Mail, item.OnPremisesExtensionAttributes.ExtensionAttribute8, item.DisplayName);
}
}
public static GraphServiceClient CreateGraphServiceClient()
{
TenantDomain = "mycompanytenant.onmicrosoft.com";
TenantId = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
ClientId = "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy";
ClientSecret = "zzzzzzzzzzzz";
var clientCredential = new ClientCredential(ClientId, ClientSecret);
var authenticationContext = new AuthenticationContext($"https://login.microsoftonline.com/mycompanytenant.onmicrosoft.com");
var authenticationResult = authenticationContext.AcquireTokenAsync("https://graph.microsoft.com", clientCredential).Result;
var delegateAuthProvider = new DelegateAuthenticationProvider((requestMessage) =>
{
requestMessage.Headers.Authorization = new AuthenticationHeaderValue("bearer", authenticationResult.AccessToken);
return Task.FromResult(0);
});
// Use this for v.1.0 endpoint
//return new GraphServiceClient(delegateAuthProvider);
// Use this for connecting to beta endpoint
return new GraphServiceClient("https://graph.microsoft.com/beta", delegateAuthProvider);
}
}
}
当我 运行 通过调试器时,我没有看到 "ExternalUserState" 作为返回用户的属性。
如何访问来宾用户对象的 ExternalUserState 属性?
您使用的是 SDK,因此您使用的是 Graph v1.0,而不是 Beta。 SDK 都是从 v1.0 元数据生成的,因此模型中根本不存在 beta 属性和方法。
不时会有测试版推送到 GitHub,但通常会落后几个版本。目前,最新的 beta SDK 似乎是 v1.12.0(供参考,当前的 SDK 是 v1.15)。
您好,我正在尝试编写一个简单的控制台应用程序,我打算将其制作成批处理文件,并获取通过电子邮件邀请的外部用户列表,现在他们在我们的 Azure 租户中拥有来宾帐户,他们已兑换通过电子邮件发送给他们的 url。当他们兑换时,他们的 extenalUserState 设置为 "Accepted"。我想找出哪些具有该状态。
我被告知我必须指向 API 的 beta 版本,而不是图形端点的 v.1.0。
我编写了以下基本代码,查看了我可以在 GitHub/MS 文档中为 API 等找到的各种示例。
using Microsoft.Graph;
using Microsoft.IdentityModel.Clients.ActiveDirectory;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
namespace CreateAzureADUser
{
class Program
{
static string TenantDomain;
static string TenantId;
static string ClientId;
static string ClientSecret;
static void Main(string[] args)
{
GetUsers();
//Console.WriteLine("------------------------------------------\n\n");
//GetGroupsAndMembers();
//CreateAzureADUserNow();
}
private static void GetUsers()
{
var graphServiceClient = CreateGraphServiceClient();
var users = graphServiceClient.Users.Request().Filter("userType eq 'Guest' and startswith(mail,'phs')")
.Select("id,mail,OnPremisesExtensionAttributes,userType,displayName,externalUserState")
.GetAsync()
.Result;
Console.WriteLine("Users found: {0}", users.Count);
Console.WriteLine();
foreach (var item in users)
{
Console.WriteLine("displayName: {3} \nuser id: {0} \nuser email: {1} \nExtensionAttribute8: {2}\n", item.Id, item.Mail, item.OnPremisesExtensionAttributes.ExtensionAttribute8, item.DisplayName);
}
}
public static GraphServiceClient CreateGraphServiceClient()
{
TenantDomain = "mycompanytenant.onmicrosoft.com";
TenantId = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
ClientId = "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy";
ClientSecret = "zzzzzzzzzzzz";
var clientCredential = new ClientCredential(ClientId, ClientSecret);
var authenticationContext = new AuthenticationContext($"https://login.microsoftonline.com/mycompanytenant.onmicrosoft.com");
var authenticationResult = authenticationContext.AcquireTokenAsync("https://graph.microsoft.com", clientCredential).Result;
var delegateAuthProvider = new DelegateAuthenticationProvider((requestMessage) =>
{
requestMessage.Headers.Authorization = new AuthenticationHeaderValue("bearer", authenticationResult.AccessToken);
return Task.FromResult(0);
});
// Use this for v.1.0 endpoint
//return new GraphServiceClient(delegateAuthProvider);
// Use this for connecting to beta endpoint
return new GraphServiceClient("https://graph.microsoft.com/beta", delegateAuthProvider);
}
}
}
当我 运行 通过调试器时,我没有看到 "ExternalUserState" 作为返回用户的属性。
如何访问来宾用户对象的 ExternalUserState 属性?
您使用的是 SDK,因此您使用的是 Graph v1.0,而不是 Beta。 SDK 都是从 v1.0 元数据生成的,因此模型中根本不存在 beta 属性和方法。
不时会有测试版推送到 GitHub,但通常会落后几个版本。目前,最新的 beta SDK 似乎是 v1.12.0(供参考,当前的 SDK 是 v1.15)。