我正在使用 C# 中的 MSGraph SDK v4.27.0 读取客户电子邮件帐户。它工作正常,但一位客户坚持使用允许列表来访问 EWS 电子邮件。这授予对提供用户代理字符串的应用程序的访问权限,但我如何使用 SDK 调用将其包含在 MSGraph 标头中?
代码取自 MS 示例
var scopes = new[] { "User.Read","Mail.ReadWrite","Mail.ReadWrite.Shared" };
var options = new TokenCredentialOptions
{
AuthorityHost = AzureAuthorityHosts.AzurePublicCloud
};
var userName = strAccount;
var password = strPWD ;
var userNamePasswordCredential = new UsernamePasswordCredential(
userName, password, tenantId, theClientId, options);
var graphClient = new GraphServiceClient(userNamePasswordCredential, scopes);
try
{
rootFolder = await graphClient.Me.MailFolders["msgfolderroot"]
.Request()
.GetAsync();
}..
最终从 GitHubs 文档中找到了答案,尽管确实进行了一些实验发现标头选项名称是“User-Agent” 您创建一个选项列表并添加用户代理选项
List<Option> theOptions = new List<Option>();
theOptions.Add(new HeaderOption("User-Agent", "MyUserAgentName"));
然后每个 .Request() 调用都必须将选项作为参数,例如
rootFolder = await graphClient.Me.MailFolders["msgfolderroot"]
.Request(theOptions)
.GetAsync();
注意 v5 中的这个变化
为了传递标头,不再使用 HeaderOption 类。使用 requestConfiguration 修饰符添加标头,如下所示
var user = await graphServiceClient
.Users["{user-id}"]
.GetAsync(requestConfiguration => requestConfiguration.Headers.Add("ConsistencyLevel","eventual"));