在Blazor中是否有缓存破坏的解决方案?我将我的asp.net core应用程序转换为Blazor WebAssembly,在razor页面中使用
asp-append-version=true
来更新客户端缓存。
发现DLL存在同样的问题。asp-append-version=true
来更新客户端缓存。
发现DLL存在同样的问题。我和我的同事Nurzhan Aitbayev,Yerassyl Shalabayev开发了以下解决方案:
"ApplicationSettings": {
...
"Version": "Release-0"
}
"ApplicationSettings": {
...
"Version": "Release-0"
}
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("Версия приложения обновилась");
}
}
}
protected async Task RefreshPageAsync()
{
await JSRuntime.InvokeVoidAsync("reloadPage");
}
JS
<script>
function reloadPage() {
location.reload(true);
}
</script>
BlazorPWA.MSBuild
nuget包是用于生成PWA所需文件的。<ServiceWorkerCacheVersion>1</ServiceWorkerCacheVersion>
<ServiceWorkerForce>true</ServiceWorkerForce>
如果您想要实现这个 NuGet 包,请查看 此链接。
<plug>BlazorPWA.MSBuild</plug>
是一个免费的开源包,可在nuget上获取,它会为您完成所有设置。 - Mister Magoo