SharePoint 2013列表getByTitle()失效及Items接口500错误求助
遇到这种能获取列表元数据,但访问/Items就抛出500错误+System.Collections.Generic.KeyNotFoundException的情况,大概率是你的SharePoint列表本身存在字段或视图损坏的问题,我来给你一步步排查和解决:
1. 先缩小范围:限制返回字段排查问题
首先,我们先排除是特定字段导致的问题。修改你的AJAX请求,只返回最基础的字段(比如ID和Title):
$.ajax({ url: url + "/_api/web/lists/getbytitle('" + listname + "')/items?$select=ID,Title&$top="+maxReturnedRows, method: "GET", async: false, headers: { "Accept": "application/json; odata=verbose" }, success: function (data) { listArray = data.d.results; }, error: function (data) { alert('Error in AJAX-Call to '+listname); failure(data); } });
如果这个请求能成功返回数据,说明默认视图里包含了某个损坏的字段,接下来就可以逐步添加字段到$select里,找到那个导致错误的字段,再针对性修复。
2. 检查列表视图中的无效字段
REST API默认会返回列表默认视图的所有字段,如果视图里存在以下情况的字段,就会触发这个错误:
- 计算字段的公式引用了已删除的字段,导致显示
#NAME? - 查找字段关联的目标列表已被删除,或者目标字段不存在
- 字段已被删除,但仍保留在视图中
排查步骤:
- 打开列表的设置页面,进入视图设置(默认视图)
- 检查所有勾选的字段,移除那些看起来异常的字段(比如显示异常的计算字段)
- 保存视图后,再尝试调用原REST请求,看是否恢复正常
3. 检查列表字段的完整性
如果视图没问题,那可能是列表本身的字段定义损坏了:
- 调用
/_api/web/lists/getbytitle('" + listname + "')/fields查看所有字段的详情 - 重点检查计算字段的
Formula属性、查找字段的LookupList和LookupField属性,看是否有引用不存在的列表或字段 - 如果发现无效字段,直接删除或者修改其定义(比如修复计算字段的公式)
4. 修复列表内部结构
如果上述方法都没用,可能是列表的内部XML定义损坏了,可以尝试以下两种修复方式:
方式一:通过浏览器修复
访问列表的高级设置页面:http://你的站点地址/_layouts/15/listedit.aspx?List={列表的GUID},随便修改一个无关的设置(比如列表描述),然后保存,这会触发SharePoint重新整理列表的字段和视图定义。
方式二:通过PowerShell修复
打开SharePoint管理Shell,执行以下脚本(替换对应的站点地址和列表名称):
$web = Get-SPWeb "http://你的站点地址" $list = $web.Lists["你的列表名称"] $list.Update($true) # 强制更新列表,修复潜在的结构损坏 $web.Dispose()
5. 最后排除权限问题(虽然500不是典型权限错误,但也值得确认)
确保当前用户对列表的项目有读取权限:
- 进入列表设置的权限级别,检查用户所属的权限组是否包含「查看项目」权限
- 如果是自定义权限级别,确认没有遗漏项目读取的相关权限
内容的提问来源于stack exchange,提问作者Vaibhav Dwivedi
相关产品推荐
相关产品推荐

