SharePoint API GetFolderByServerRelativeUrl 将不起作用 GetFileByServerRelativeUrl 将起作用
Posted
技术标签:
【中文标题】SharePoint API GetFolderByServerRelativeUrl 将不起作用 GetFileByServerRelativeUrl 将起作用【英文标题】:SharePoint API GetFolderByServerRelativeUrl will not work yet GetFileByServerRelativeUrl will work 【发布时间】:2021-12-04 02:29:40 【问题描述】:在某些情况下,我正在使用sp-rest-proxy 制作一个工具,该工具将使用反应接口从 SharePoint (MS 365) 获取、修改和替换 json 数据。在找出身份验证问题后,我现在遇到了阻止我更新文件的问题。
注意: sp-rest-proxy 带有一个非常方便的界面,可以让您在 localhost 上测试各种路由,下面的块是 SharePoint REST 相关端点。另外,虽然我出于隐私目的使用示例路径,但真实路径中没有特殊字符,这不是“%”问题。
这个端点很好用,可以毫不费力地给我数据
/sites/front/_api/web/GetFileByServerRelativeUrl('sites/homePage/DivisionSite/DeptSite/myLibrary/folder/subFolder/data.json')/$value
但这些会导致 404s
/sites/front/_api/web/GetFolderByServerRelativeUrl('sites/homePage/DivisionSite/DeptSite/myLibrary/folder/subFolder')/files/add(url='data.json',overwrite=true)
/sites/front/_api/web/GetFolderByServerRelativeUrl('sites/homePage/DivisionSite/DeptSite/myLibrary/folder/subFolder')/Files('data.json')
/*
"readyState": 4,
"responseText": "\"error\":\"code\":\"-2147024893, System.IO.DirectoryNotFoundException\",\"message\":\"lang\":\"en-US\",\"value\":\"File Not Found.\"",
"responseJSON":
"error":
"code": "-2147024893, System.IO.DirectoryNotFoundException",
"message":
"lang": "en-US",
"value": "File Not Found."
,
"status": 404,
"statusText": "Not Found"
*/
我可以使用界面查看我的文件夹是否存在并包含项目(我的 json 文件)
/sites/front/_api/web/GetFolderByServerRelativeUrl('sites/homePage/DivisionSite/DeptSite/myLibrary/folder/subFolder')
/*
"..." represents stuff I hid for privacy
"d":
"__metadata":
"id": "...",
"uri": "...",
"type": "SP.Folder"
,
"Files":
"__deferred":
"uri": "..."
,
"ListItemAllFields":
"__deferred":
"uri": "..."
,
"ParentFolder":
"__deferred":
"uri": "..."
,
"Properties":
"__deferred":
"uri": "..."
,
"StorageMetrics":
"__deferred":
"uri": "..."
,
"Folders":
"__deferred":
"uri": "..."
,
"Exists": true,
"IsWOPIEnabled": false,
"ItemCount": 5,
"Name": "otherFolder",
"ProgID": null,
"ServerRelativeUrl": "sites/homePage/DivisionSite/DeptSite/myLibrary/folder/subFolder",
"TimeCreated": "2021-09-20T18:51:29Z",
"TimeLastModified": "2021-10-01T20:03:03Z",
"UniqueId": "...,
"WelcomePage": ""
*/
但是,当我尝试查看文件时...
/sites/front/_api/web/GetFolderByServerRelativeUrl('sites/homePage/DivisionSite/DeptSite/myLibrary/folder/subFolder')/Files
/*
"d":
"results": []
*/
(“?$expand=File” 的结果类似)
鉴于我似乎需要 GetFolderByServerRelativeUrl 来替换文件,我真的需要弄清楚那里发生了什么。
附录: 基于一些类似的问题,我也会提到这一点。我的应用权限设置如下:(建议here)
<AppPermissionRequests AllowAppOnlyPolicy="true">
<AppPermissionRequest Scope="http://sharepoint/content/tenant" Right="FullControl" />
</AppPermissionRequests>
【问题讨论】:
【参考方案1】:路径应该是相对路径。网址应如下所示
/sites/front/_api/web/GetFolderByServerRelativeUrl('Library/folder/otherFolder')/files/add(url='data.json',overwrite=true)
api是上传或创建路径中的文件。您应该确认 sharepoint 在线站点有文件夹和文档库
【讨论】:
感谢您的建议,我在刷完correct terminology 后更新了我的问题,使用myLibrary/folder/subFolder
似乎导致400 错误“参数名称:不支持指定的值serverRelativeUrl 参数。”我能够将路线削减到/DeptSite/myLibrary/folder/subFolder
,这是我不知道自己能做到的。但是,它给了我同样的问题。这与 UI 建议的链接相匹配(请参阅新图 1)。【参考方案2】:
我在这里收到了来自 Microsoft 表单的答复 (https://docs.microsoft.com/en-us/answers/questions/600556/sharepoint-rest-api-getfilebyserverrelativeurl-iss.html)
虽然@RaytheonXie-MSFT 提供的答案很接近(如果我在第一次发帖时有正确的路径,可能会发现,所以这在我身上)
我缺少的是在 URL 中调用 GetFolderByServerRelativeUrl 之前。通过调整那里的路径,更多的相对路径将是正确的。
我需要的是:
/sites /homePage/DivisionSite/DeptSite/ _api/web/GetFolderByServerRelativeUrl('myLibrary/folder/subFolder')/Files
我太专注于 GetFolderByServerRelativeUrl 命令,以至于我的 GetFolderByServerRelativeUrl 路径错误
【讨论】:
以上是关于SharePoint API GetFolderByServerRelativeUrl 将不起作用 GetFileByServerRelativeUrl 将起作用的主要内容,如果未能解决你的问题,请参考以下文章
Sharepoint 2013:通过 REST API 确保用户
Sharepoint 2013 通过 REST API:尝试创建项目时禁止出现错误 403
SharePoint REST API。在 SharePoint 列表上进行 AJAX 调用时出现 400 错误请求
从sharepoint rest api下载文件时出现400错误
如何通过 REST API 在另一台服务器上为 Sharepoint 2013 和 Sharepoint Online 运行的脚本中更新 SharePoint 列表?