Отчеты API Office 365 Graph API getOneDriveActivityFileCounts или GetEmailActivityCounts выдают ошибку - PullRequest
1 голос
/ 16 января 2020

Я пытаюсь получить некоторые отчеты из O365, используя Graph API, примеры работают, а также работает проводник графиков, но при попытке получить любой отчет, который возвращает CSV или текстовый файл, я получаю ошибки, я использую следующее ядро :

  IPublicClientApplication publicClientApplication = PublicClientApplicationBuilder
            .Create("XXX")
            .Build();
            string[] scopes = new string[] { "Organization.ReadWrite.All",
        "Reports.Read.All" };
            var accounts = await publicClientApplication.GetAccountsAsync();
            AuthenticationResult result;
            try
            {
                result = await publicClientApplication.AcquireTokenSilent(scopes, accounts.FirstOrDefault())
                            .ExecuteAsync();
            }
            catch (MsalUiRequiredException)
            {
                result = await publicClientApplication.AcquireTokenInteractive(scopes)
                            .ExecuteAsync();
            }

            // Create an authentication provider by passing in a client application and graph scopes.
            DeviceCodeProvider authProvider = new DeviceCodeProvider(publicClientApplication, scopes);
            // Create a new instance of GraphServiceClient with the authentication provider.
            GraphServiceClient graphClient = new GraphServiceClient(authProvider);
            var x = await graphClient.Reports.GetOneDriveActivityFileCounts("D30").Request().GetAsync()

;

это выдает ошибку: Newtonsoft. Json .JsonReaderException: 'При синтаксическом анализе значения: R. Path' ', строка 0, позиция 0, обнаружен неожиданный символ. '

Из документации следует получить URL-адрес, по которому я могу загрузить файл, я пытался запросить формат JSON, но он также не поддерживается, что я делаю не так?!

1 Ответ

0 голосов
/ 17 января 2020

Если вы используете GraphServiceClient graphClient = new GraphServiceClient(authProvider);, это выдаст эту ошибку.

Копаясь в SDK, я обнаружил, что в HttpProvider есть метод JsonConvert.DeserializeObject<Report>(inputString).

Вот его информация :

/// <summary>
/// Deserializes the JSON string to an object of the specified type.
/// </summary>
/// <typeparam name="T">The deserialization type.</typeparam>
/// <param name="inputString">The JSON string to deserialize.</param>
/// <returns>The deserialized object.</returns>
    T DeserializeObject<T>(string inputString);

Очевидно, что это является причиной ошибки. Его нельзя десериализовать, потому что это CSV, а не JSON данные.

Я думаю, что это ошибка Graph SDK в настоящее время.

В качестве временного решения вы можете напрямую вызвать конечную точку API для получите данные.

Или вы можете реализовать свой собственный сериализатор в своем коде.

См. следующий пример:

HttpProvider provider = new HttpProvider(new MySerializer());
var graphServiceClient = new GraphServiceClient(authProvider, provider);
var x = await graphClient.Reports.GetOneDriveActivityFileCounts("D30").Request().GetAsync();

И MySerializer () выглядит следующим образом:

internal class MySerializer : ISerializer
        {
            public T DeserializeObject<T>(Stream stream)
            {
                throw new NotImplementedException();
            }



            public T DeserializeObject<T>(string inputString)
            {

                //implement your logical here 
                return default(T);
            }



            public string SerializeObject(object serializeableObject)
            {
                //implement your logical here 
                return "TEST MESSAGE";
            }
        }

inputString - это содержимое отчета csv. Вы могли бы справиться с этим самостоятельно. И тогда он вернется к «х», который вы определили.

...