SharePoint Get all sites and all sub sites using SharePoint online REST API

空扰寡人 提交于 2019-12-13 17:58:28

问题


For SharePoint Online connector We used following steps to fetch all sites:

Step 1: Created Add-in on SharePoint instance with following permission xml

<AppPermissionRequests>
        <AppPermissionRequest Scope="http://sharepoint/content/tenant" Right="FullControl"/>
        <AppPermissionRequest Scope="http://sharepoint/content/sitecollection" Right="Read"/>
</AppPermissionRequests>

Step 2: Used below API to get all sites and subsites

https://<site_name>.sharepoint.com/_api/search/query?querytext='contentclass:STS_Site' &rowlimit=100

Issue we are facing

  1. Above endpoint is returning all sites, sub sites along with user’s personal site(One drive), while we need all sites and sub sites only.
  2. Please suggest minimal required permission to read all site, all subsite, all folders and files metadata

We referred following links:

  • http://www.ktskumar.com/2017/01/access-sharepoint-online-using-postman/
  • https://docs.microsoft.com/en-us/sharepoint/dev/sp-add-ins/add-in-permissions-in-sharepoint
  • https://docs.microsoft.com/en-us/sharepoint/dev/sp-add-ins/get-to-know-the-sharepoint-rest-service

回答1:


You should add a path filter in the endpoint.

Normal site collections have a path like https://tenant.sharepoint.com whereas personal (One Drive) site collections have path like https://tenant-my.sharepoint.com/personal/*.

So, modify your endpoint as below:

https://<site_name>.sharepoint.com/_api/search/query?querytext='contentclass:STS_Site
Path:"https://<site_name>.sharepoint.com/*"'&rowlimit=500

This will only return site collections starting with https://<site_name>.sharepoint.com path and will exclude the One Drive site collections which are on a different path.




回答2:


A way from Joel Dsouza for your reference.

1.The First Ajax is to get the Root Site Title and the Relative URL.

$.ajax({
    url: _spPageContextInfo.siteAbsoluteUrl + "/_api/site/rootweb?$select=Title,ServerRelativeUrl",
    method: "GET",
    headers: {
        "Accept": "application/json; odata=verbose"
    },
    success: function(rootsite) {

    },
    error: function(rootsite) {},
    async: false
});

2.The Second AJAX is to get all the sub sites under the Root Site.

$.ajax({
    url: _spPageContextInfo.siteAbsoluteUrl + "/_api/web/webinfos?$select=ServerRelativeUrl,Title",
    method: "GET",
    headers: {
        "Accept": "application/json; odata=verbose"
    },
    success: function(subsites) {
        $.each(subsites.d.results, function() {
            getSubSites(this.ServerRelativeUrl, this.Title);
        });

    },
    error: function(subsites) {},
    async: false
});

3.This is a Recursive Function to loop through the sub sites and check for more sub sites.

function getSubSites(SubSiteUrl, SubSiteTitle) {
    console.log(SubSiteUrl);
    $.ajax({
        url: _spPageContextInfo.siteAbsoluteUrl + SubSiteUrl + "/_api/web/webinfos?$select=ServerRelativeUrl,Title",
        method: "GET",
        headers: {
            "Accept": "application/json; odata=verbose"
        },
        success: function(subsites) {

            $.each(subsites.d.results, function(index) {
                getSubSites(this.ServerRelativeUrl, this.Title);
            });
        },
        error: function(subsites) {},
        async: false
    });
}

More information: Get All Sites and Sub Sites using REST API




回答3:


https://yoursharepointsite.com/_api/search/query?querytext='(contentclass:STS_Site) (contentclass:STS_Web)'&trimduplicates=false&rowlimit=5000&selectproperties='Title,Url,Path,ParentLink'"

The above rest url shoul give you all the Sites and subsite the user has access to. You may need to trim duplicates.



来源:https://stackoverflow.com/questions/51616560/sharepoint-get-all-sites-and-all-sub-sites-using-sharepoint-online-rest-api

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!