Я настраиваю веб-приложение, которое извлекает данные пользователя через стороннего поставщика удостоверений (Azure AD). Чтобы получить фотографию пользователя, мне, кажется, нужно сделать вызов API, используя его токен доступа. Как только я получу его, какой лучший способ сохранить / сохранить его для отображения в каждом представлении, к которому они переходят?
Пока что единственный известный мне способ работы с точки зрения показа их фотографии - это позвонить по телефону. API-интерфейс Microsoft Graph, чтобы получить фотографию в виде потока памяти, преобразовать ее в массив байтов, а затем сохранить ее в виде базовой строки 64, которая впоследствии будет названа источником img. Ниже приведен код, который реализует данный метод.
var photoStream = await graphClient.Me.Photo.Content.Request().GetAsync();
byte[] photoByte = ((MemoryStream)photoStream).ToArray();
var sessionPhoto = Convert.ToBase64String(photoByte);
ViewData["photo"] = sessionPhoto;
session.SetString("photo", sessionPhoto);
Эта последняя строка, где я пытаюсь сохранить Base64String в сеансе, является частью моей предыдущей попытки найти решение. Однако создается впечатление, что создание изображения из данных, сохраненных в ViewData["photo"]
, работает нормально, а при попытке извлечь из Session.GetString("photo")
получается поврежденное изображение.
В представлении _Layout у меня есть:
@using Microsoft.AspNetCore.Http
@inject IHttpContextAccessor HttpContextAccessor
...
@if (ViewData["photo"] != null)
{
<img class="mr-2" src="data:image/jpeg;base64, @ViewData["photo"]" />
}
else
{
var sessionPhoto = HttpContextAccessor.HttpContext.Session.GetString("photo");
if (sessionPhoto != null)
{
<img class="mr-2" src="data:image/jpeg;base64, sessionPhoto" />
}
else
{
<i class="fas fa-user-circle fa-3x mr-3"></i>
}
}
...
Я ожидал, что получение строки из ViewData ["photo"] даст тот же результат, что и получение из сеанса, но, опять же, версия сеанса не работает. Кроме того, я относительно новичок в создании веб-приложений в ядре .net и даже не уверен, является ли сеанс лучшим способом хранения / получения фотографии, поэтому я открыт для предложений и альтернатив.