Как использовать MS graph API C# для поиска всех документов, соответствующих строке поиска - PullRequest
0 голосов
/ 11 марта 2020

Я использую код вызова ниже для поиска документа в sharepoint:

// секрет приложения и id azure для графика MS

       string cSecret = "XXXX";
       string cId = "XXXXXXXX";

        var scopes = new string[] { "https://graph.microsoft.com/.default" };
        var confidentialClient = ConfidentialClientApplicationBuilder
      .Create(cId)
      .WithAuthority($"https://login.microsoftonline.com/murphyoil.onmicrosoft.com/v2.0")
      .WithClientSecret(cSecret)
      .Build();

        string requestUrl;
        GraphServiceClient graphClient =
        new GraphServiceClient(new DelegateAuthenticationProvider(async (requestMessage) =>
        {
            var authResult = await confidentialClient
    .AcquireTokenForClient(scopes)
    .ExecuteAsync();

            // Add the access token in the Authorization header of the API request.
            requestMessage.Headers.Authorization =
            new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", authResult.AccessToken);
        }));


        requestUrl = "https://graph.microsoft.com/beta/search/query";

        var searchRequest = new
        {
            requests = new[]
                    {
            new
            {
                entityTypes = new[] {"microsoft.graph.driveItem"},
                query = new
                {
                    query_string = new
                    {
                        query = "policy AND filetype:docx"
                    }
                },
                from = 0,
                size = 25
            }
        }
        };
        //construct a request
        var message = new HttpRequestMessage(HttpMethod.Post, requestUrl);
        var jsonPayload = graphClient.HttpProvider.Serializer.SerializeObject(searchRequest);
        message.Content = new StringContent(jsonPayload, Encoding.UTF8, "application/json");
        await graphClient.AuthenticationProvider.AuthenticateRequestAsync(message);
        var response = await graphClient.HttpProvider.SendAsync(message);
        //process response 
        var content = await response.Content.ReadAsStringAsync();
        var result = JObject.Parse(content);
        var searchItems = result["value"].First["hitsContainers"].First["hits"].Select(item =>
        {
            var itemUrl = (string)item["_source"]["webUrl"];
            return itemUrl;
        });
    }

Я использую код выше для поиска документа в SharePoint. Но получение несанкционированного доступа. Тот же идентификатор приложения и секрет работают в MS графе поиска Active Directory, но не в этом случае.

1 Ответ

0 голосов
/ 12 марта 2020

Вы можете использовать Microsoft Search API для поиска файлов, хранящихся в SharePoint или OneDrive, он поддерживает Keyword Query Language (KQL для краткости) синтаксис в терминах поисковых запросов, например :

POST /search/query
Content-Type: application/json
{
  "requests": [
    {
      "entityTypes": [
        "microsoft.graph.externalFile"
      ],
      "query": {
        "query_string": {
          "query": "contoso AND filetype:docx"
        }
      },
      "from": 0,
      "size": 25
    }
  ]
}

Вот тот же пример, преобразованный в C# версию:

Примечание :

, поскольку Microsoft Search API только доступно в версии beta на данный момент, вам нужно будет создать запрос самостоятельно, если вы используете Graph Client Library .

Поддерживаются только следующие разрешения

Delegated (work or school account)    Mail.Read, Files.Read.All, Calendars.Read, ExternalItem.Read.All
var graphClient = AuthManager.GetClient("https://graph.microsoft.com/");


var requestUrl = "https://graph.microsoft.com/beta/search/query";
var searchRequest = new
        {
            requests = new[]
            {
                new
                {
                    entityTypes = new[] {"microsoft.graph.driveItem"},
                    query = new
                    {
                        query_string = new
                        {
                            query = "contoso AND filetype:docx"
                        }
                    },
                    from = 0,
                    size = 25
                }
            }
};
//construct a request
var message = new HttpRequestMessage(HttpMethod.Post, requestUrl);
var jsonPayload = graphClient.HttpProvider.Serializer.SerializeObject(searchRequest);
message.Content = new StringContent(jsonPayload, Encoding.UTF8, "application/json");
await graphClient.AuthenticationProvider.AuthenticateRequestAsync(message);
var response = await graphClient.HttpProvider.SendAsync(message);
//process response 
var content = await response.Content.ReadAsStringAsync();
var result = JObject.Parse(content);
var searchItems = result["value"].First["hitsContainers"].First["hits"].Select(item =>
        {
            var itemUrl = (string) item["_source"]["webUrl"];
            return itemUrl;
        });

Ссылки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...