gpt4 book ai didi

c# - .NET Core 2.2 Razor Pages 网站模板以及如何缓存 MSFT Graph 调用

转载 作者:太空宇宙 更新时间:2023-11-03 14:43:01 27 4
gpt4 key购买 nike

我在 VS2019 中建立了一个简单的 ASP.NET Core 2.2 网站并包含了 Microsoft.Identity.Web项目使用 MSAL.NET 调用 Microsoft Graph API。

我已经成功调用图表,包括通过注入(inject) tokenAcquisitiongraphApiOperations 在顶部导航栏的 /me 端点显示我的照片 根据 sample application on docs 的指导如下:

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 中,但我不知道其他方法。要求 Graph 为每个页面拉取 /me 数据似乎很浪费;更不用说糟糕的设计了。

有没有办法缓存结果并跨多个页面引用它们?

最佳答案

您可以在 ASPNET Core 中使用 taghelper, as documented here

我很想使用“因查询而异”并将有问题的查询基于 usertoken/cookie 值,因此您仅在 token 过期时刷新。

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

我敢肯定这里有一个可能对您有用的变体。

关于c# - .NET Core 2.2 Razor Pages 网站模板以及如何缓存 MSFT Graph 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55886134/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com