使用Microsoft Graph SDK获取DriveItem活动列表报错问题
解决Graph SDK调用DriveItem.Activities报错的问题
问题根源:C#版Microsoft Graph v1.0 SDK的DriveItem类未公开activities属性,因此直接调用.Expand("activities")会触发OData验证错误,提示找不到该属性——尽管手动调用REST API能正常返回数据。
以下是可行的解决方案:
方案1:自定义请求绕过SDK强类型限制
构造完整的API请求URL,通过SDK的HttpProvider发送请求,同时自定义类接收包含activities的响应:
- 首先定义扩展类,添加
Activities属性:
using Microsoft.Graph; using System.Text.Json.Serialization; public class DriveItemWithActivities : DriveItem { [JsonPropertyName("activities")] public List<ItemActivity> Activities { get; set; } }
- 发送自定义请求:
var requestUrl = $"drives/{driveId}/items/{driveItemId}?expand=activities"; var driveItem = await this.GraphServiceClient.HttpProvider.SendAsync<DriveItemWithActivities>( new HttpRequestMessage(HttpMethod.Get, requestUrl), new SerializationSettings()); // 访问活动列表 var activities = driveItem.Activities;
方案2:切换到Beta版SDK(非生产环境推荐)
Beta版SDK的DriveItem类已包含activities属性,可直接使用Expand:
- 安装Beta版NuGet包:
Install-Package Microsoft.Graph.Beta
- 使用Beta版客户端调用:
using Microsoft.Graph.Beta; var betaClient = new GraphServiceClient(/* 你的身份验证提供者 */); var driveItem = await betaClient.Drives[driveId].Items[driveItemId] .Request() .Expand("activities") .GetAsync(); var activities = driveItem.Activities;
注意:Beta版API存在变动风险,不建议用于生产环境。
方案3:直接用HttpClient调用REST API
绕开SDK,直接发送HTTP请求并解析响应:
using System.Net.Http; using System.Net.Http.Headers; var httpClient = new HttpClient(); httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "你的访问令牌"); var response = await httpClient.GetAsync($"https://graph.microsoft.com/v1.0/drives/{driveId}/items/{driveItemId}?expand=activities"); response.EnsureSuccessStatusCode(); var jsonResponse = await response.Content.ReadAsStringAsync(); // 使用System.Text.Json或Newtonsoft.Json解析jsonResponse,提取activities字段
内容的提问来源于stack exchange,提问作者Maryna Shubna
相关产品推荐
相关产品推荐

