blazor - blazor 中的缓存破坏
问题描述
Blazor 中的缓存破坏有什么解决方案吗?我在 Blazor WebAssembly 中转换了我的 asp.net 核心应用程序,我asp-append-version=true
在 razor 页面中使用它来更新客户端缓存。
发现与 DLL 相同的问题
解决方案
我和我的同事Nurzhan Aitbayev , Yerassyl Shalabayev开发了以下解决方案:
- 在 web.client 的 wwwroot/appsettings.json 中存储版本
"ApplicationSettings": {
...
"Version": "Release-0"
}
- 在 web.server appsettings.json 中存储版本
"ApplicationSettings": {
...
"Version": "Release-0"
}
- Web 服务器总是在标头中返回实际版本:
app.Use(async (context, next) =>
{
context.Response.Headers.Add("Application-Version", Configuration["ApplicationSettings:Version"]);
await next.Invoke();
});
- 客户端检查每个响应的版本
private void CheckAppVersion(HttpResponseMessage response)
{
if (response == null)
{
throw new ArgumentNullException(nameof(response));
}
response.Headers.TryGetValues("Application-Version", out var headers);
if (headers == null || !headers.Any())
{
return;
}
var appVersion = headers.First();
if (!string.IsNullOrWhiteSpace(appVersion))
{
var localVersion = _applicationSettings.Version;
var isActual = string.Compare(localVersion, appVersion, StringComparison.OrdinalIgnoreCase);
if (isActual != 0)
{
throw new OldVersionException("Версия приложения обновилась");
}
}
}
- 如果用户有异常,则重新加载页面:C#
protected async Task RefreshPageAsync()
{
await JSRuntime.InvokeVoidAsync("reloadPage");
}
JS
<script>
function reloadPage() {
location.reload(true);
}
</script>
推荐阅读
- server - 为什么不和谐一直奇怪地向我的服务器发送请求
- java - 如何在单独的方法中使用 Scanner 而无需多次调用
- c++ - 从基类指针访问派生类
- swift - 更改 3d 模型的纹理图像
- javascript - 在 React 中遇到 Api Cors 问题
- data-structures - 堆栈和队列概念
- java - 启动包过程后,spring 抛出 java.sql.SQLTransientConnectionException
- selenium - Azure 管道:如何在 VS 测试任务中添加失败的 selenium Xunit 测试用例附件
- python - 使用 Tkinter 连接 python 脚本
- django - 在 django url 中使用 include 时,Django Swagger 开始失败