使用MS Graph SDK v5.56调用OneDrive Delta API时Select参数不生效求助
解决MS Graph SDK v5.56 Delta请求Select参数不生效的问题
问题出在你使用了WithUrl()方法——当传入自定义URL时,SDK会直接用这个完整URL发起请求,不会再合并后续设置的QueryParameters.Select参数,所以你的筛选条件没生效,返回了完整响应。
给你两种可行的解决方案:
方案一:使用SDK原生方法构建请求(推荐)
移除WithUrl(),直接通过SDK的API设置delta token和Select参数,SDK会自动正确拼接查询参数:
// 改用await异步调用,避免GetAwaiter().GetResult()可能导致的死锁问题 var deltaresponse = await gsc.Drives[driveId].Items["root"] .Delta .GetAsDeltaGetResponseAsync(rc => { rc.Headers.Add("Prefer", "deltaExcludeParent"); // 设置需要返回的字段 rc.QueryParameters.Select = new string[] { "Name", "Deleted", "File", "CreatedDateTime", "LastModifiedDateTime", "ParentReference", "Id", "OdataType" }; // 直接设置delta token,无需手动拼接URL rc.QueryParameters.Token = urlEncodedTime; });
方案二:手动将Select参数追加到自定义URL中
如果必须使用自定义URL,就把$select参数直接拼到URL里:
// 拼接Select参数 var selectFields = new string[] { "Name", "Deleted", "File", "CreatedDateTime", "LastModifiedDateTime", "ParentReference", "Id", "OdataType" }; string selectParam = string.Join(",", selectFields); // 构建包含$select的完整URL string url = $"https://graph.microsoft.com/v1.0{resourcePath}/delta?token={urlEncodedTime}&$select={selectParam}"; var deltaresponse = await gsc.Drives[driveId].Items["root"] .Delta .WithUrl(url) .GetAsDeltaGetResponseAsync(rc => { rc.Headers.Add("Prefer", "deltaExcludeParent"); });
另外提醒下,尽量避免使用GetAwaiter().GetResult(),改用await异步调用,减少死锁风险。
内容的提问来源于stack exchange,提问作者John Park
相关产品推荐
相关产品推荐

