You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:20:23