我想提取我的应用程序的应用程序注册和服务主体,只知道 appId。这需要我将 (appId='appId') 附加到 URI。
https://graph.microsoft.com/v1.0/applications(appId='appId') https://graph.microsoft.com/v1.0/servicePrincipals(appId='appId')
由于无法附加到 URI,我不得不使用
RequestInformation
,然后使用 RequestAdapter.SendAsync
来获取信息。这是完整的代码
var requestInfo = graphServiceClient.Applications.ToGetRequestInformation();
var fixedUri = $"{requestInfo.URI}(appId='<my app id here>')";
requestInfo.URI = new Uri(fixedUri);
var apps = await graphServiceClient.RequestAdapter.SendAsync(requestInfo, ApplicationCollectionResponse.CreateFromDiscriminatorValue).ConfigureAwait(false);
效果很好。但结果变量有一个空的
Value
属性,所以我没有得到任何已解析的 Application
返回。不过,我确实将应用程序视为 apps.AdditionalData
中的数据字典,因此我知道数据已返回。我需要做什么才能填充 Value
?
请注意,我已经找到了
graphServiceClient.ApplicationsWithAppId
和graphServiceClient.ServicePrincipalWithAppId
,所以我确实有一个解决方案,但我仍然对手动方式感到好奇
原因是 https://graph.microsoft.com/v1.0/applications(appId='appId') 不返回集合而是单个实体,因此您需要使用
Application.CreateFromDiscriminatorValue
而不是ApplicationCollectionResponse.CreateFromDiscriminatorValue
。
结果将是
Application
的实例。
var requestInfo = graphServiceClient.Applications.ToGetRequestInformation();
var fixedUri = $"{requestInfo.URI}(appId='<my app id here>')";
requestInfo.URI = new Uri(fixedUri);
var app = await graphServiceClient.RequestAdapter.SendAsync(requestInfo, Application.CreateFromDiscriminatorValue).ConfigureAwait(false);