Я пытаюсь использовать Graph SDK для получения определенного сайта Sharepoint по URL-адресу, чтобы я мог читать и писать список, создавать библиотеки документов и добавлять документы в существующие библиотеки.
Это работает для получения рута:
var site = await graphClient.Sites[SPUrl].Request().GetAsync();
Это не работает, чтобы получить сайт, который я хочу:
var site = await graphClient.Sites[SPUrl+"/segment1/segment2/site"].Request().GetAsync();
И это не работает, чтобы получить сайт по URL-адресу - он говорит мне, что «предоставленный путь не существует или не представляет сайт»:
var siteByPath = await graphClient.Sites[SPUrl].SiteWithPath("/segment1/segement2/site").Request().GetAsync();
Но с помощью Graph Explorer это работает: https://graph.microsoft.com/v1.0/sites/my.site.com:/sites/segment1/segment2/сайт?$select=id
Используя Graph Explorer, я определил, что каждый сегмент URL-адреса считается отдельным сайтом, но мне это не удалось - ошибка "при условии, что идентификатор неверный - идентификатор недействителен":
var site = await graphClient.Sites[SPUrl].Sites["segment1"].Request().GetAsync();
Что мне не хватает?
С Sharepoint CSOM вы можете просто запросить сайт по его URL-адресу. Мое приложение сейчас находится в Azure и проходит аутентификацию с помощью токенов OAuth, а не с помощью имени пользователя и пароля, которые обрабатываются в приложении, поэтому я не уверен, что смогу пройти эту аутентификацию через CSOM. Насколько я могу судить, мне нужно использовать Graph сейчас.
Похоже, проблема заключалась в том, что если вы собираетесь запрашивать сайты в корне сайта, вам нужно добавить «:» к исходной строке корневого сайта. Так "ждите graphClient.Sites[SPUrl].Sites["/segment1/segment2/site"].Request().GetAsync();" должно быть "ждите graphClient.Sites[SPUrl+":"].Sites["/segment1/segment2/site"].Request().GetAsync();" что позволит ему соответствовать синтаксису, используемому в Graph Explorer.
Я предполагал, что запрос сайта с использованием SDK справится с этим, но я ошибался.