PNP CORE SDK获取列表项文件属性报错:ServerRelativeUrl未加载
错误原因分析
- 未正确构造加载查询:你的代码仅指定了File的
ServerRelativeUrl子属性,但未明确将Item的File属性标记为需要加载的对象,导致PnP Core SDK无法正确加载File实例及其属性。 - 未触发实际数据加载:PnP Core SDK采用延迟执行机制,直接遍历
listCommercial.Items不会发起API请求,必须通过异步方法(如ToListAsync)触发数据获取。
正确实现代码
以下两种写法均可实现等效于你提供的REST API的功能:
写法一:使用QueryProperties嵌套构造查询
var listCommercial = await pnpCoreContextProject.Web.Lists.GetByTitleAsync("Commercial"); // 加载Item的Id,同时加载File的ServerRelativeUrl var items = await listCommercial.Items .QueryProperties(i => new { i.Id, i.File }) .QueryProperties(i => i.File.QueryProperties(f => f.ServerRelativeUrl)) .ToListAsync(); foreach (var item in items) { // 避免无附件的Item导致空引用 if (item.File != null) { Log(item.File.ServerRelativeUrl); } }
写法二:使用Include简化查询构造
var listCommercial = await pnpCoreContextProject.Web.Lists.GetByTitleAsync("Commercial"); var items = await listCommercial.Items .Include(i => i.Id, i => i.File.Include(f => f.ServerRelativeUrl)) .ToListAsync(); foreach (var item in items) { if (item.File != null) { Log(item.File.ServerRelativeUrl); } }
关键说明
- 必须通过
await调用异步方法触发API请求,确保数据被实际加载。 - 访问
File属性前建议做空值判断,避免无附件的列表项导致空引用异常。
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

