Загрузка файла из SharePoint с помощью Flurl вызывает ошибку «Не удалось инициализировать систему конфигурации» - PullRequest
0 голосов
/ 13 февраля 2020

Я использую Flurl для загрузки файла из SharePoint. Однако это вызывает ошибку «Не удалось инициализировать систему конфигурации».

Вот мой код:

 var url = "https://mysite.sharepoint.com"
                .AppendPathSegment("/_api/web/Shared%20Documents/test.xlsx")
                .SetQueryParams(new
                {
                    api_key = ConfigurationManager.AppSettings["MYAPIKEY"],
                    max_results = 20,
                    q = "Don't worry, I'll get encoded!"
                })
                .SetFragment("after-hash");

                //returns fullpath for App-specific storage, where inventory data is stored
                string fullpath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);

                var path = await "https://mysite.sharepoint.com/Shared%20Documents/test.xlsx"
                    .DownloadFileAsync(fullpath);

Ключ API, который я добавил, был создан в Azure AD.

Я подозреваю, что ошибка вызвана моим файлом app.config, однако, поскольку я использую Xamarin.Forms, у меня изначально не было файла app.config. Чтобы решить эту проблему, я использую библиотеку PCLAppConfig и следовал описанию в ссылке.

Моя проблема в том, что я не уверен в том, что мне следует поместить в app.config файл. Текущее содержимое файла конфигурации ниже, и я пробовал несколько разных вещей, но я всегда получал одну и ту же ошибку.

<configuration>
  <appSettings>
    <add key="api_key" value="MYAPIKEY" />
  </appSettings>
</configuration>

Это стек вызовов, если он помогает:

>   0x3F in GraphTutorial.DownloadFile.Flurlcall at D:\Schule\Diplomarbeit\GraphTutorial\CalendarPage.xaml.cs:35,17 C#
    0x33 in System.Runtime.CompilerServices.AsyncVoidMethodBuilder.Start<GraphTutorial.DownloadFile.<Flurlcall>d__1>    C#
    0x38 in GraphTutorial.DownloadFile.Flurlcall    C#
    0x11 in Xamarin.Forms.Button.Xamarin.Forms.Internals.IButtonElement.PropagateUpClicked at D:\a\1\s\Xamarin.Forms.Core\Button.cs:177,47  C#
    0x20 in Xamarin.Forms.ButtonElement.ElementClicked at D:\a\1\s\Xamarin.Forms.Core\ButtonElement.cs:61,5 C#
    0x2 in Xamarin.Forms.Button.SendClicked at D:\a\1\s\Xamarin.Forms.Core\Button.cs:163,32 C#
    0x4 in Xamarin.Forms.Platform.Android.ButtonElementManager.OnClick at D:\a\1\s\Xamarin.Forms.Platform.Android\ButtonElementManager.cs:25,4  C#
    0xD in Xamarin.Forms.Platform.Android.FastRenderers.ButtonRenderer.Android.Views.View.IOnClickListener.OnClick at D:\a\1\s\Xamarin.Forms.Platform.Android\FastRenderers\ButtonRenderer.cs:71,45 C#
    0x13 in Android.Views.View.IOnClickListenerInvoker.n_OnClick_Landroid_view_View_    C#
    0x17 in Android.Runtime.DynamicMethodNameCounter.48 C#

1 Ответ

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

Оказывается, что ошибка не имеет никакого отношения к самому Flurl, реальная проблема была с URL, который я использовал.

Мне удалось заставить его работать, вызвав вместо этого Microsoft Graph API с этим запросом:

GET https://graph.microsoft.com/v1.0/sites/root/drive/root:/Subfolder/test.xlsx

В ответ вы получаете свойство @microsoft.graph.downloadUrl, которое позволяет вам загрузить URL.

Вот ссылка, которая мне очень помогла в этом разобраться: https://docs.microsoft.com/en-us/graph/api/driveitem-get-content?view=graph-rest-1.0&tabs=http

...