Microsoft Graph未返回SharePoint文档库全部字段问题咨询
问题原因
Graph API 默认仅返回常用字段集合,不会自动返回所有内置字段(如_dlc_DocId、FileRef)和自定义字段;而CSOM执行Load(items)时会加载列表项的全部字段值,因此两者返回的字段数量存在差异。
解决方案
1. 显式指定需要获取的字段(推荐)
修改请求配置,在Select参数中列出需要的字段(包含内置字段和自定义字段),确保Graph API返回目标字段:
string[] scopes = new[] { "https://graph.microsoft.com/.default" }; GraphServiceClient graphClient = new GraphServiceClient(credential, scopes); var items = graphClient.Sites[siteId].Lists[listId].Items.GetAsync((requestConfiguration) => { requestConfiguration.QueryParameters.Expand = new string[] { "fields" }; // 按需添加需要的字段,内置字段直接用原始名称 requestConfiguration.QueryParameters.Select = new string[] { "fields/_dlc_DocId", "fields/FileRef", "fields/Title", "fields/你的自定义字段名" }; }).Result.Value; // 访问指定字段 var docId = items[0].Fields.AdditionalData["_dlc_DocId"]; var fileRef = items[0].Fields.AdditionalData["FileRef"];
2. 获取所有字段(仅测试场景使用)
如果需要临时获取全部字段,可以使用*通配符,但该方式会返回大量冗余数据,不推荐生产环境使用:
var items = graphClient.Sites[siteId].Lists[listId].Items.GetAsync((requestConfiguration) => { requestConfiguration.QueryParameters.Expand = new string[] { "fields" }; requestConfiguration.QueryParameters.Select = new string[] { "fields/*" }; }).Result.Value;
3. 特殊字段的替代获取方式
对于部分和文件关联的字段(如FileRef),也可以通过展开driveItem属性获取更完整的文件信息:
var items = graphClient.Sites[siteId].Lists[listId].Items.GetAsync((requestConfiguration) => { requestConfiguration.QueryParameters.Expand = new string[] { "fields", "driveItem" }; }).Result.Value; // 从driveItem中获取文件访问路径 var fileUrl = items[0].DriveItem.WebUrl;
内容的提问来源于stack exchange,提问作者General Un-Co
相关产品推荐
相关产品推荐

