SharePoint 2010中GetFolderByServerRelativeUrl API调用报404错误求助
嘿,这个坑我之前帮好几个开发者踩过!你遇到的404完全不是操作有误,而是SharePoint 2010和2013的REST API根本不是一套东西——2013引入的/_api/Web/GetFolderByServerRelativeUrl('')这种/_api/开头的现代REST端点,SharePoint 2010里压根就没有,所以调用必然返回404!
问题核心原因
SharePoint 2010的API生态和2013+差异很大:
- 2013及以后才推出了统一的
/_api/REST API体系 - 2010里的OData服务是另一个端点:
/_vti_bin/listdata.svc,同时还支持CSOM和传统SOAP Web服务
SharePoint 2010获取文件夹及文件的正确方案
给你几个实用的方法,按需选择:
1. 使用2010专属的OData端点(/_vti_bin/listdata.svc)
这是2010里最接近2013 REST体验的方式,通过OData查询来定位文件夹和文件:
- 获取指定路径的文件夹:
GET /_vti_bin/listdata.svc/Folders?$filter=ServerRelativeUrl eq '/sites/yourSite/TargetFolder'
- 获取该文件夹下的所有文件:
先通过上面的请求拿到文件夹的Id(GUID),然后构造:
GET /_vti_bin/listdata.svc/Folders(guid'文件夹GUID')/Files
2. 使用Client Object Model(CSOM)
如果是写代码(JavaScript/C#/PowerShell),CSOM在2010里支持得很好,比如JavaScript版示例:
// 初始化客户端上下文 var ctx = new SP.ClientContext.get_current(); var web = ctx.get_web(); // 获取目标文件夹 var targetFolder = web.getFolderByServerRelativeUrl('/sites/yourSite/TargetFolder'); // 加载文件夹及其下的文件集合 ctx.load(targetFolder); ctx.load(targetFolder.get_files()); // 执行异步请求 ctx.executeQueryAsync( function() { // 成功回调:遍历文件 var files = targetFolder.get_files(); for(var i = 0; i < files.get_count(); i++) { console.log('文件名:' + files.get_item(i).get_name()); } }, function(sender, args) { // 失败回调 console.error('请求失败:' + args.get_message()); } );
3. 使用传统SOAP Web服务(Lists.asmx)
如果你习惯用SOAP接口,可以调用/_vti_bin/lists.asmx的GetListItems方法,通过构造查询XML来筛选文件夹和文件。不过这种方式相对繁琐,不如前两种直观。
额外注意点
- 确认你的请求路径正确:Apps4Rent托管的站点可能有特定的域名或站点前缀,别漏了站点的相对路径
- 权限检查:虽然这次404主要是API版本问题,但也要确保你的账号有目标文件夹的读取权限,避免权限不足导致的“伪404”
内容的提问来源于stack exchange,提问作者vijay
相关产品推荐
相关产品推荐

