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 列表?

Microsoft Graph API SharePoint 搜索