Невозможно аутентифицировать вызовы SharePoint REST или CSOM из .NET Core.C#

Место общения программистов C#
Ответить
Anonymous
 Невозможно аутентифицировать вызовы SharePoint REST или CSOM из .NET Core.

Сообщение Anonymous »

У меня возникли проблемы с доступом к SharePoint с использованием CSOM и службы REST из консольного приложения .NET Core.

Сначала я создал консольное приложение, предназначенное для .NET Framework. 4.6.1, установил пакет nuget Microsoft.SharePointOnline.CSOM и добавил два примера метода для подключения к SharePoint с использованием жестко запрограммированных учетных данных пользователя. Это работает.

Код: Выделить всё

public static void CsomCall()
{
var password = "password";
var securePassword = new SecureString();
foreach (var c in password.ToCharArray()) securePassword.AppendChar(c);

using (ClientContext context = new ClientContext("https://siteurl"))
{
context.Credentials = new SharePointOnlineCredentials("user@domain", securePassword);
Web web = context.Web;
context.Load(web);
context.ExecuteQuery();
Console.WriteLine(web.Title);
}
}
private static void RestCall()
{
var password = "password";
var securePassword = new SecureString();
foreach (var c in password.ToCharArray()) securePassword.AppendChar(c);

var credentials = new SharePointOnlineCredentials("user@domain", securePassword);

using (WebClient client = new WebClient())
{
client.Headers.Add("X-FORMS_BASED_AUTH_ACCEPTED", "f");
client.Credentials = credentials;
client.Headers.Add(HttpRequestHeader.ContentType, "application/json;odata=verbose");
client.Headers.Add(HttpRequestHeader.Accept, "application/json;odata=verbose");
var content = client.DownloadString("https://siteurl/_api/web/lists");
Console.WriteLine(content);
}
}
Затем я создал консольное приложение .NET Core и скопировал его с помощью описанных выше методов. Я понимаю, что SharePoint CSOM еще не поддерживается в .NET Core, поэтому я воспользовался предложенным здесь обходным решением и вручную сослался на Microsoft.SharePoint.Client.Portable.dll, Microsoft.SharePoint.Client.Runtime.Portable.dll и Microsoft.SharePoint. Client.Runtime.Windows.dll.

Для компиляции кода пришлось внести пару изменений:
  • Код: Выделить всё

    .ExecuteQueryAsync()
    вместо .ExecuteQuery()
  • Код: Выделить всё

    var credentials = new SharePointOnlineCredentials("user@domain", password);
    Обратите внимание: пароль — это простая строка в Microsoft.SharePoint.Client.Runtime.Portable.
Когда при запуске CsomCall происходит сбой при доступе к web.Title:


Microsoft.SharePoint.Client.PropertyOrFieldNotInitializedException: 'Свойство или поле «Название» не инициализировано. Он не был запрошен или запрос не был выполнен. Возможно, потребуется явно запросить его.


При запуске RestCall происходит сбой с ошибкой на клиенте.DownloadString:

System.Net.WebException: «Удаленный сервер возвратил ошибку: (401) Неавторизованный».

Можно ли настроить SharePointOnlineCredentials для работы с .NET Core? Поиск по переполнению стека показывает, что это должно быть возможно, но я просто не могу заставить это работать.

В конечном итоге мы хотели бы создать службу веб-API с использованием ASP. NET Core для создания документов для внутренних пользователей (чтение шаблонов документов из SharePoint, создание нового документа и сохранение обратно в SharePoint). Использование CSOM или REST и работа на данный момент в ОС Windows.

Подробнее здесь: https://stackoverflow.com/questions/528 ... m-net-core
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»