Загрузите файл в C# Asp.Net Core в Sharepoint/OneDrive с помощью Microsoft Graph без взаимодействия с пользователем.C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Загрузите файл в C# Asp.Net Core в Sharepoint/OneDrive с помощью Microsoft Graph без взаимодействия с пользователем.

Сообщение Anonymous »

Я получаю сообщение об ошибке 400 «Неверный запрос» при попытке загрузить файл в OneDrive с помощью управляющего приложения с помощью API Microsoft Graph. Я использую HttpClient, а не GraphServiceClient, поскольку последний предполагает взаимодействие и работает с DelegatedAuthenticationProvider(?).
  • Приложение зарегистрировано в AAD и имеет право на разрешение приложения (Microsoft Graph/File ReadWrite.All).
  • Регистрация предназначена для одного клиента и не имеет URL-адреса перенаправления (согласно инструкциям).
Основной метод Upload получает AccessToken через Helper AuthenticationConfig и помещает файл в OneDrive/SharePoint с помощью Helper ProtectedApiCallHelper .

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

[HttpPost]
public async Task Upload(IFormFile file)
{
var toegang = new AuthenticationConfig();
var token = toegang.GetAccessTokenAsync().GetAwaiter().GetResult();

var httpClient = new HttpClient();
string bestandsnaam = file.FileName;
var serviceEndPoint = "https://graph.microsoft.com/v1.0/drive/items/{Id_Of_Specific_Folder}/";

var wurl = serviceEndPoint + bestandsnaam + "/content";
// The variable wurl looks as follows: "https://graph.microsoft.com/v1.0/drive/items/{Id_Of_Specific_Folder}/proefdocument.txt/content"
var apicaller = new ProtectedApiCallHelper(httpClient);
apicaller.PostWebApi(wurl, token.AccessToken, file).GetAwaiter();

return View();
}
Я получаю правильный токен доступа, используя следующий стандартный помощник AuthenticationConfig.GetAccessToken()

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

public async Task GetAccessTokenAsync()
{
AuthenticationConfig config = AuthenticationConfig.ReadFromJsonFile("appsettings.json");
IConfidentialClientApplication app;

app = ConfidentialClientApplicationBuilder.Create(config.ClientId)
.WithClientSecret(config.ClientSecret)
.WithAuthority(new Uri(config.Authority))
.Build();

string[] scopes = new string[] { "https://graph.microsoft.com/.default" };

AuthenticationResult result = null;
try
{
result = await app.AcquireTokenForClient(scopes).ExecuteAsync();
return result;
}
catch (MsalServiceException ex) when (ex.Message.Contains("AADSTS70011"))
{
...
return result;
}
}
С помощью AccessToken, Graph-Url и файла для загрузки (в виде IFormFile) вызывается Helper ProtectedApiCallHelper.PostWebApi

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

public async Task PostWebApi(string webApiUrl, string accessToken, IFormFile fileToUpload)
{
Stream stream = fileToUpload.OpenReadStream();
var x = stream.Length;
HttpContent content = new StreamContent(stream);

if (!string.IsNullOrEmpty(accessToken))
{
var defaultRequestHeaders = HttpClient.DefaultRequestHeaders;
HttpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/octet-stream"));
defaultRequestHeaders.Authorization = new AuthenticationHeaderValue("bearer", accessToken);

// Here the 400 Bad Request happens
HttpResponseMessage response = await HttpClient.PutAsync(webApiUrl, content);

if (response.IsSuccessStatusCode)
{
return;
}
else
{
//error handling
return;
}
}
}
ИЗМЕНИТЬ

Смотрите рабочее решение ниже.

Подробнее здесь: https://stackoverflow.com/questions/592 ... rosoft-gra
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Загрузите файл в Sharepoint с помощью Microsoft Graph и C#.
    Anonymous » » в форуме C#
    0 Ответы
    51 Просмотры
    Последнее сообщение Anonymous
  • Загрузите файл в Sharepoint с помощью Microsoft Graph и C#.
    Anonymous » » в форуме C#
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Ошибка Microsoft Sharepoint CSOM: не найден конструктор по умолчанию для типа Microsoft.SharePoint.Client.ContentTypeId
    Anonymous » » в форуме C#
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous
  • Ошибка Microsoft Sharepoint CSOM: не найден конструктор по умолчанию для типа Microsoft.SharePoint.Client.ContentTypeId
    Anonymous » » в форуме Android
    0 Ответы
    28 Просмотры
    Последнее сообщение Anonymous
  • Возникло несколько проблем после обновления Microsoft.Graph и Microsoft.Graph.Core – ищем замену этих фрагментов кода.
    Anonymous » » в форуме C#
    0 Ответы
    38 Просмотры
    Последнее сообщение Anonymous

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