API SharePoint GetFolderByServerRelativeUrl пока не будет работать GetFileByServerRelativeUrl будет работать

#sharepoint #sharepoint-rest-api

Вопрос:

Для некоторого контекста я использую sp-rest-прокси, чтобы создать инструмент, который будет получать, изменять и заменять данные json из SharePoint (MS 365) с помощью интерфейса react. После выяснения проблем с аутентификацией у меня теперь есть эта проблема, которая мешает мне обновлять файлы.

примечание: sp-rest-прокси поставляется с очень удобным интерфейсом, который позволяет вам тестировать различные маршруты на локальном хосте, фрагменты ниже являются относительными конечными точками SharePoint REST. Кроме того, хотя я использую примеры путей в целях конфиденциальности, в реальных путях нет специальных символов, это не проблема»%».

Эта конечная точка отлично работает, предоставляет мне данные без суеты

 /sites/front/_api/web/GetFileByServerRelativeUrl('sites/homePage/DivisionSite/DeptSite/myLibrary/folder/subFolder/data.json')/$value  
 

но это приводит к 404-м годам

 /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": []
  }
}
*/ 
 

(«? $развернуть=файл» дает аналогичные результаты)

Учитывая, что мне, похоже, нужен GetFolderByServerRelativeUrl для замены файлов, мне действительно нужно выяснить, что там происходит.

потенциальное местоположение GetFolderByServerRelativeUrl

потенциальная причина разрешения папки проблемы

добавление: Основываясь на некоторых аналогичных вопросах, я также упомяну об этом. Разрешения для моего приложения установлены следующим образом: (как предлагается здесь)

  <AppPermissionRequests AllowAppOnlyPolicy="true">
   <AppPermissionRequest Scope="http://sharepoint/content/tenant" Right="FullControl" />
 </AppPermissionRequests>
 

Ответ №1:

Путь должен быть относительным путем. URL-адрес должен быть следующим

 /sites/front/_api/web/GetFolderByServerRelativeUrl('Library/folder/otherFolder')/files/add(url='data.json',overwrite=true)
 

API предназначен для загрузки или создания файла в пути. Вам следует подтвердить, что на сайтах sharepoint online есть папка и библиотека документов

Комментарии:

1. Спасибо за предложение, я обновил свой вопрос после уточнения правильной терминологии , использование myLibrary/folder/subFolder которой, похоже, приводит к ошибке 400 «Имя параметра: Указанное значение не поддерживается для параметра serverRelativeUrl». Я смог сократить маршрут до минимума, до /DeptSite/myLibrary/folder/subFolder которого я не знал, что смогу это сделать. Однако это вызывает у меня ту же проблему. это соответствует ссылке, которую предлагает пользовательский интерфейс (см. Новый img 1).

Ответ №2:

Я получил ответ из формы Microsoft здесь (https://docs.microsoft.com/en-us/answers/questions/600556/sharepoint-rest-api-getfilebyserverrelativeurl-iss.html)

Хотя ответ, предоставленный @RaytheonXie-MSFT, был близок (и, вероятно, был бы на месте, если бы у меня был правильный путь, когда я впервые опубликовал, так что это на мне)

чего мне не хватало, так это до вызова GetFolderByServerRelativeUrl в URL-адресе. корректируя путь там, более относительный путь будет правильным.

что мне было нужно, так это:

/сайты /Домашняя страница/Сайт подразделений/Сайт отдела/ _api/web/GetFolderByServerRelativeUrl(‘Библиотека/папка/подпапка’)/Файлы

Я был так сосредоточен на команде GetFolderByServerRelativeUrl, что мой путь к пути к GetFolderByServerRelativeUrl был неправильным