c# - .NET Core 2.2 Razor Pages 网站模板以及如何缓存 MSFT Graph 调用
问题描述
我在 VS2019 中建立了一个简单的 ASP.NET Core 2.2 网站,并包含了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 页面上显示照片以及可能的其他 Graph 数据,而无需在每个页面上手动调用 Graph。由于这_LoginPartial.cshtml
不是 Razor 页面,因此我无法将结果放入其中,@ViewData
但我不知道另一种方式。/me
让 Graph为每一页拉取数据似乎很浪费;更不用说糟糕的设计了。
有没有办法缓存结果并跨多个页面引用它们?
解决方案
您可以在 ASPNET Core 中使用 <cache> taghelper,如此处所述
我很想使用“因查询而异”并将有问题的查询基于 usertoken/cookie 值,因此您仅在令牌过期时刷新。
<cache vary-by-query="Thing1,Thing2">
<span>Some Stuff I need to cache</span>: @ViewData[MyStuff]
</cache>
我敢肯定,这可能对您有用。
推荐阅读
- ios - 使用 Firebase 云功能时如何在 iOS 中发送通知?
- php - 从 WooCommerce 电子邮件中隐藏付款说明已完成的订单通知
- angular - Angular PWA 动态更改清单
- python - 如何修复地理定位 API URL 以使用特定参数
- c# - 索引超出范围,但我知道列在那里
- ios - 以编程方式使用 Crashlytics 满足 GDPR
- javascript - 如何使用 React 和 Redux 保持我的可迭代值循环?
- json - 消息通知产生“此内容无法显示”
- python - Docker 容器在服务器上的行为与本地机器不同 - uwsgi 和 nginx
- css - 根据内容的div高度