У меня проблемы с доступом к SharePoint с использованием как CSOM, так и службы REST из консольного приложения .NET Core.
Сначала я создал консольное приложение для .NET Framework 4.6.1, установил Microsoft.SharePointOnlineПакет .CSOM nuget и добавлены два примера методов для подключения к 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: 'Свойство или поле' Title 'не было инициализировано.Он не был запрошен или запрос не был выполнен.Может потребоваться явный запрос. '
При запуске RestCall происходит сбой с ошибкой на client.DownloadString:
System.Net.WebException:' Удаленный сервервозвратил ошибку: (401) Unauthorized. '
Возможно ли настроить SharePointOnlineCredentials для работы с .NET Core?Поиски переполнения стека показывают, что это должно быть возможно, но я просто не могу заставить его работать.
В конечном итоге мы хотели бы создать службу Web API с использованием ASP.NET Core для генерации документов для внутренних пользователей (чтение шаблонов документов из SharePoint, создание нового документа и сохранение обратно в SharePoint).Используя CSOM или REST, и пока работаем в ОС Windows.