Шаблон веб-сайта .NET Core 2.2 Razor Pages и как кэшировать вызовы MSFT Graph - PullRequest
2 голосов
/ 28 апреля 2019

Я создал простой веб-сайт ASP.NET Core 2.2 в VS2019 и включил проект Microsoft.Identity.Web для выполнения вызовов с использованием MSAL.NET в Microsoft Graph API.

Я успешно выполнял вызовы на график, включая показ моей фотографии с конечной точки /me в верхней панели навигации, введя tokenAcquisition и graphApiOperations, как указано в примере приложения в документах следующим образом:

public async Task OnGet()
{
    var accessToken = await tokenAcquisition.GetAccessTokenOnBehalfOfUser(HttpContext, new[] { ScopeConstants.ScopeUserRead });        
    var photo = await graphApiOperations.GetPhotoAsBase64Async(accessToken);

    ViewData["photo"] = photo;
}

Следуя вместе с шаблоном сайта, каждая страница ссылается на файл _layout.cshtml со ссылкой на _LoginPartial.cshtml, который выглядит следующим образом:

<ul class="navbar-nav">
    @if (User.Identity.IsAuthenticated)
    {
        <li class="nav-item">
            <a href="/AdminSettings">
                    <img class="circle-photo" src="data:image/jpeg;base64, @ViewData["photo"]" />
            </a>
        </li>
        <li class="nav-item">
            <a class="nav-link text-dark" asp-area="AzureAD" asp-controller="Account" asp-action="SignOut">Sign out</a>
        </li>
    }
    else
    {
        <li class="nav-item">
            <a class="nav-link text-dark" asp-area="AzureAD" asp-controller="Account" asp-action="SignIn">Sign in</a>
        </li>
    }
</ul>

Мой вопрос:

Я хочу показать фотографию и, возможно, другие данные Графика на каждой странице Razor, не вызывая График вручную на каждой странице.Поскольку _LoginPartial.cshtml не является страницей Razor, я не могу поместить результаты в @ViewData, однако я не знаю другого способа.Кажется бесполезным просить График получить данные /me для каждой страницы;не говоря уже о плохом дизайне.

Есть ли способ кэшировать результаты и ссылаться на них на нескольких страницах?

1 Ответ

0 голосов
/ 30 апреля 2019

Вы можете использовать теги в ASPNET Core, , как описано здесь

У меня возникнет соблазн перейти с «варьировать по запросу» и основать запрос на значениях пользовательских токенов / файлов cookie, поэтому вы обновляете только по истечении срока действия токена.

<cache vary-by-query="Thing1,Thing2">
    <span>Some Stuff I need to cache</span>: @ViewData[MyStuff]
</cache>

Я уверен, что есть вариант, который может быть полезен для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...