我正在try 构建一个.NET8控制台应用程序,它将使用仅限应用程序的权限来执行一些Microsoft Graph调用.该应用程序使用证书来获取令牌,并且应该在没有任何用户提示的情况下对自己进行身份验证.

下面的代码之所以起作用,是因为我能够将WithAppOnly选项设置为仅与应用程序权限一起使用:

var devices = await graphServiceClient.DeviceManagement.ManagedDevices.GetAsync(r => r.Options.WithAppOnly());

但是,如果我try 遍历所有页面,似乎PageIterator忽略了WithAppOnly选项,因此我得到以下错误:

IDW10502:由于质询的原因引发了MsalUiRequiredException 用户.

下面是我用来迭代的代码:

var devicelist = new List<DeviceModel>();

var pageIterator = PageIterator<ManagedDevice, ManagedDeviceCollectionResponse>.CreatePageIterator(graphServiceClient, devices, (device) =>
{
    devicelist.Add(DeviceModelMapper.MapFromManagedDevice(device));
    return true;
    });
await pageIterator.IterateAsync();

如何将with AppOnly请求选项添加到迭代器?或者我可以在我的图形客户端中添加WithAppOnly选项作为默认选项吗?

在最坏的情况下,我如何在没有迭代器的情况下遍历页面?

谢啦!

推荐答案

您是否try 为后续请求配置请求选项?

var pageIterator = PageIterator<ManagedDevice, ManagedDeviceCollectionResponse>.CreatePageIterator(graphServiceClient, devices, (device) =>
{
    devicelist.Add(DeviceModelMapper.MapFromManagedDevice(device));
    return true;
},
requestInfo=>
{
    var requestOptions = new List<IRequestOption>();
    requestOptions.WithAppOnly();
    requestInfo.AddRequestOptions(requestOptions);
    return requestInfo;
});

Csharp相关问答推荐

如何使嵌套for-loop更高效?

Dapper是否可以自动扩展类成员

. NET 8使用COM向VB6公开

属性getter和setter之间的空性不匹配?

Unity中的刚体2D运动

. net依赖注入如何避免服务类中的新

使用C#HttpClient以多部分形式数据发送带有非ASCII文件名的文件的问题

为基本审计设置Audit.EntityFramework.Core

单元测试:模拟返回空

当索引和外键是不同的数据类型时,如何设置导航属性?

具有可空类型的C#NOTNULL约束具有意外行为

VS 2022与VS 2019:如何/为什么创建额外的任务?

在扩展方法中,IEnumerable<;T>;不会转换为IEumerable<;T&>

两个DateTimeOffset之间的差异返回意外的负值

如何在C#中从MongoDB IPipelineStageDefinition中获取聚合命令的字段/选项?

如何在使用Google.Drive.apis.V3下载文件/文件夹之前压缩?

使用C#12中的主构造函数进行空判断

如何在Cake脚本中设置MSBuild.exe的绝对路径

如何在C#中反序列化Java持续时间?

默认架构不存在EF核心迁移