如何通过SharePoint 2013 REST API获取页面当前正式版本标题
我完全懂你的困扰——当草稿和正式版本标题不一样时,要精准拿到已发布版本的标题确实容易踩坑。试试下面这两个可靠的方案:
方案1:通过Versions集合筛选正式版本并获取标题
直接针对文件的版本集合,筛选出正式(主)版本,再展开关联的列表项字段拿到标题。这个方法不需要提前知道版本号,更灵活:
获取所有正式版本的标题
_api/web/GetFileByServerRelativeUrl('/Pages/file1.aspx')/Versions?$filter=IsMajorVersion eq true&$select=VersionLabel,ListItemAllFields/Title&$expand=ListItemAllFields
获取最新的正式版本标题
如果只需要最新的已发布版本,加上排序和分页:
_api/web/GetFileByServerRelativeUrl('/Pages/file1.aspx')/Versions?$filter=IsMajorVersion eq true&$select=VersionLabel,ListItemAllFields/Title&$expand=ListItemAllFields&$orderby=Created desc&$top=1
这个请求里:
IsMajorVersion eq true:筛选出所有正式发布的版本(排除草稿的次要版本)$expand=ListItemAllFields:展开版本对应的列表项数据,这样就能拿到该版本的TitleVersionLabel可以帮你确认当前拿到的是哪个版本(比如3.0这样的标识)
方案2:修正_vti_history路径的请求方式
你之前用_vti_history报错,大概率是路径或请求方式不对。SharePoint的版本历史文件夹里的数字是主版本号 × 512(比如主版本1对应512,主版本3对应1536),而且要确保路径包含完整的站点结构(如果是子站点的话)。
假设你的正式版本是3,站点根目录是/sites/YourSite,正确的请求应该是:
_api/web/GetFileByServerRelativeUrl('/sites/YourSite/_vti_history/1536/Pages/file1.aspx')/ListItemAllFields?$select=Title
注意:
- 必须加上
/ListItemAllFields?$select=Title,直接请求文件本身不会返回标题字段 - 500错误可能是权限问题——确保当前账号有读取版本历史的权限,或者路径里的版本号对应不存在的版本(比如文件还没发布到3.0版本)
额外注意事项
- 如果文件从未发布过(只有草稿),
IsMajorVersion eq true会返回空结果,要提前处理这种情况 - 避免直接用
$filter=IsCurrentVersion eq true,因为这个属性标记的是最新版本(不管是草稿还是正式版),这就是你之前拿到草稿标题的原因
内容的提问来源于stack exchange,提问作者LindaL
相关产品推荐
相关产品推荐

