Blazor 中的缓存破坏
Cache Busting in blazor
Blazor 中的缓存破坏有什么解决方案吗?我在 Blazor WebAssembly 中转换了我的 asp.net 核心应用程序,我在 razor 页面中使用 asp-append-version=true
进行客户端缓存更新。
Found DLL 存在同样的问题
根据@Mister评论添加我的答案。
BlazorPWA.MSBuild
nuget包是生成PWA需要的文件。
对于更新缓存,您每次要发布代码时都会更改您的项目文件。
<ServiceWorkerCacheVersion>1</ServiceWorkerCacheVersion>
<ServiceWorkerForce>true</ServiceWorkerForce>
如果你想实现这个 nuget 包,请勾选这个 like。
我和我的同事Nurzhan Aitbayev, Yerassyl Shalabayev制定了以下解决方案:
- 在 web.client 的 wwwroot/appsettings 中存储版本。json
"ApplicationSettings": {
...
"Version": "Release-0"
}
- 将版本存储在 web.server appsettings.json
"ApplicationSettings": {
...
"Version": "Release-0"
}
- Web 服务器总是 returns header 中的实际版本:
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>
Blazor 中的缓存破坏有什么解决方案吗?我在 Blazor WebAssembly 中转换了我的 asp.net 核心应用程序,我在 razor 页面中使用 asp-append-version=true
进行客户端缓存更新。
Found DLL 存在同样的问题
根据@Mister评论添加我的答案。
BlazorPWA.MSBuild
nuget包是生成PWA需要的文件。
对于更新缓存,您每次要发布代码时都会更改您的项目文件。
<ServiceWorkerCacheVersion>1</ServiceWorkerCacheVersion>
<ServiceWorkerForce>true</ServiceWorkerForce>
如果你想实现这个 nuget 包,请勾选这个 like。
我和我的同事Nurzhan Aitbayev, Yerassyl Shalabayev制定了以下解决方案:
- 在 web.client 的 wwwroot/appsettings 中存储版本。json
"ApplicationSettings": {
...
"Version": "Release-0"
}
- 将版本存储在 web.server appsettings.json
"ApplicationSettings": {
...
"Version": "Release-0"
}
- Web 服务器总是 returns header 中的实际版本:
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>