You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MS Graph SDK手动调用API后,如何填充ApplicationCollectionResponse的Value属性?

问题:手动构造Graph API请求后Value属性为空的处理方法

当仅知晓appId时,提取应用注册和服务主体需在URI后追加(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中可见应用的数据字典。已知graphServiceClient.ApplicationsWithAppId和graphServiceClient.ServicePrincipalWithAppId的解决方案,希望了解手动方式下填充Value属性的方法。


手动填充Value属性的解决方案

问题根源

使用(appId='xxx')这种OData筛选方式时,Graph API返回的是单个Application对象(而非标准集合响应的数组结构),而ApplicationCollectionResponse期望绑定的是{"value": [/*数组*/]}格式的响应,因此解析后Value属性为空,原始数据会被存入AdditionalData。

方法1:从AdditionalData中手动解析并填充Value

从AdditionalData中取出原始JSON数据,序列化为Application实例后赋值给Value:

// 检查AdditionalData中的顶层数据,通常直接对应单个应用的JSON结构
if (apps.AdditionalData.Values.FirstOrDefault() is JsonElement appJsonElement)
{
    // 反序列化为Application对象
    var application = JsonSerializer.Deserialize<Application>(
        appJsonElement.GetRawText(),
        new JsonSerializerOptions { PropertyNameCaseInsensitive = true }
    );
    // 将解析后的对象填充到Value属性中
    apps.Value = new List<Application> { application };
}

方法2:改用单个Application的响应解析器

既然请求返回的是单个对象,直接使用Application的解析器而非集合响应解析器,无需处理Value属性:

var requestInfo = graphServiceClient.Applications.ToGetRequestInformation();
var fixedUri = $"{requestInfo.URI}(appId='<my app id here>')";
requestInfo.URI = new Uri(fixedUri);
// 使用Application的CreateFromDiscriminatorValue作为解析器
var app = await graphServiceClient.RequestAdapter.SendAsync(
    requestInfo, 
    Application.CreateFromDiscriminatorValue
).ConfigureAwait(false);
// 此时app即为解析完成的单个Application对象

内容的提问来源于stack exchange,提问作者Stephan Steiner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 22:15:03