Конвертируйте фотографию из Microsoft Graph Client SDK в Base64String - PullRequest
1 голос
/ 29 апреля 2019

Я использую более старую реализацию вызова httpClient для Microsoft Graph, чтобы получить фотографию пользователя. Следующий код работает, но сейчас я использую Graph Client SDK, и все немного по-другому. Мне трудно конвертировать код, поскольку примеры и другие ссылки в Интернете, похоже, не используют одни и те же методы.

Старый код:

var response = await httpClient.GetAsync($"{webOptions.GraphApiUrl}/beta/me/photo/$value");
byte[] photo = await response.Content.ReadAsByteArrayAsync();
return Convert.ToBase64String(photo);

Новый код:

var graphServiceClient = await graphClient.GetAuthenticatedGraphClientAsync(HttpContext);
Stream photo = await graphServiceClient.Me.Photo.Content.Request().GetAsync();

Я пробовал примеры из здесь и здесь , но я немного растерялся, поскольку ReadAsByteArrayAsync() недоступен для нового объекта photo.

1 Ответ

2 голосов
/ 29 апреля 2019

Поскольку msgraph-sdk-dotnet для Get photo конечная точка поддерживает возврат фотографий в виде Stream только

public interface IProfilePhotoContentRequest : IBaseRequest
{
    /// <summary>Gets the stream.</summary>
    /// <returns>The stream.</returns>
    Task<Stream> GetAsync();

    /// <summary>Gets the stream.</summary>
    /// <param name="cancellationToken">The <see cref="T:System.Threading.CancellationToken" /> for the request.</param>
    /// <param name="completionOption">The <see cref="T:System.Net.Http.HttpCompletionOption" /> to pass to the <see cref="T:Microsoft.Graph.IHttpProvider" /> on send.</param>
    /// <returns>The stream.</returns>
    Task<Stream> GetAsync(
      CancellationToken cancellationToken,
      HttpCompletionOption completionOption = HttpCompletionOption.ResponseContentRead);

    //...
}

и Convert.ToBase64String Метод принимает байтовый массив, в следующем примере показано, как преобразовать исходный пример:

var graphServiceClient = await graphClient.GetAuthenticatedGraphClientAsync(HttpContext);
var photoStream = await graphServiceClient.Me.Photo.Content.Request().GetAsync();
var photoBytes = ReadAsBytes(photoStream);
var result = Convert.ToBase64String(photoBytes);

, где

//Convert Stream to bytes array  
public static byte[] ReadAsBytes(Stream input)
{
    using (var ms = new MemoryStream())
    {
        input.CopyTo(ms);
        return ms.ToArray();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...