0
votes

I'm trying to use the Graph SDK to get a specific Sharepoint site by URL so I can read and write the list, create document libraries, and add documents to existing libraries.

This works to get the root:

var site = await graphClient.Sites[SPUrl].Request().GetAsync();

This doesn't work to get the site I want:

    var site = await graphClient.Sites[SPUrl+"/segment1/segment2/site"].Request().GetAsync();

And this doesn't work to get the site by URL -- it tells me "the provided path does not exist or does not represent a site":

var siteByPath = await graphClient.Sites[SPUrl].SiteWithPath("/segment1/segement2/site").Request().GetAsync();

But using the Graph Explorer, this works: https://graph.microsoft.com/v1.0/sites/my.site.com:/sites/segment1/segment2/site?$select=id

Using the Graph Explorer I determined that each segment of the URL is considered its own site, but didn't have any luck doing this -- the error is "provided identifier is malformed - id is not valid":

    var site = await graphClient.Sites[SPUrl].Sites["segment1"].Request().GetAsync();

What am I missing?

With the Sharepoint CSOM you could just ask for a site by its URL. My application is in Azure now and being authenticated by through OAuth tokens, not by a username and password handled within the application, so I'm not sure I can pass that authentication through CSOM. As far as I can tell I need to use Graph now.

1

1 Answers

0
votes

It would appear that the problem was that if you're going to query the sites under a site root, you need to add the ":" to your original root site string. So "await graphClient.Sites[SPUrl].Sites["/segment1/segment2/site"].Request().GetAsync();" needs to be "await graphClient.Sites[SPUrl+":"].Sites["/segment1/segment2/site"].Request().GetAsync();" which would make it match the syntax used in the Graph Explorer.

I had assumed that asking for a Site using the SDK would handle that, but I was wrong.