#c# #sharepoint #sharepoint-online
#c# #sharepoint #sharepoint-online
Вопрос:
Я разрабатываю инструмент, который должен загружать файлы с локального диска в SharePoint online.
Когда я пытаюсь загрузить файл через SharePoint.Клиент.Файл.SaveBinaryDirect() Я получаю ошибку 401: не авторизован
Вот мой код:
var uploadFilePath = @"C:TestFilestestFile.pdf";
var uploadFileRelativePath = "/sites/my-site/MyLibrary/testFile.pdf";
using (var ctx = new AuthenticationManager().GetAppOnlyAuthenticatedContext(site,
ConfigurationManager.AppSettings["ClientId"], ConfigurationManager.AppSettings["ClientSecret"]))
{
using (var fileStream = new FileStream(uploadFilePath, FileMode.Open))
{
File.SaveBinaryDirect(ctx, uploadFileRelativePath, fileStream, true);
}
}
Дело в том, что он отлично работает, если я заменяю SaveBinaryDirect следующим кодом:
FileCreationInformation newFile = new FileCreationInformation();
newFile.Content = System.IO.File.ReadAllBytes(uploadFilePath);
newFile.Url = "testFile.pdf";
List docs = ctx.Web.Lists.GetByTitle("MyLibrary");
docs.RootFolder.Files.Add(newFile);
ctx.ExecuteQuery();
Итак, мой инструмент явно авторизован для загрузки файлов. Это просто не работает с SaveBinaryDirect.
Я все равно хотел бы загрузить файл с помощью SharePoint.Клиент.Файл.SaveBinaryDirect. Это намного меньше кода, и мне не нужно вручную получать список и папки.
У вас есть какие-либо идеи, почему я могу получить эту ошибку 401?
Ответ №1:
Вы не можете использовать токен только для приложения с помощью метода SaveBinaryDirect: https://learn.microsoft.com/en-us/sharepoint/dev/solution-guidance/upload-large-files-sample-app-for-sharepoint :
Используйте этот метод, только если вы используете политику аутентификации только для пользователей. Политика проверки подлинности только для пользователя недоступна в надстройке SharePoint, но может использоваться в надстройках собственного устройства, Windows PowerShell и консольных приложениях Windows.
Комментарии:
1. Это объясняет ошибку, спасибо. Вы знаете, возможно ли использовать аутентификацию пользователя, который запускает инструмент? Я знаю, что это было возможно с SharePoint 2019. Однако я не уверен насчет Онлайн.
2. Извините, я не знаю 😉