如何在 Visual Studio Blazor Wasm 应用程序调试期间停止 Chrome 缓存

问题描述 投票:0回答:3

我正在使用一个小型 Blazor Wasm 应用程序来学习 Web 编程。 特别是带有 AspNetCore v3.2.0 和 Chrome v83.0.4103.116 的 Visual Studio Community 2019 v16.6.2。 有时,当我运行调试器时,我对代码(JavaScript 和 Blazor)所做的更改不会应用,除非我执行硬刷新。 我已在 Chrome DevTools 的网络部分设置“禁用缓存”,但在调试会话之间它不会保持设置状态。 每次调试时都必须进行硬刷新以防万一,这当然是一个很大的痛苦。 知道在这种情况下我可以做什么来防止缓存吗?

visual-studio google-chrome caching blazor
3个回答
10
投票

简短回答

index.html 文件的开头,在任何 Blazor 初始化之前,编写一个清除 Blazor 缓存的 Javascript 方法调用:

<script type="text/javascript">
    caches.delete("blazor-resources-/").then(function (e) {
        console.log("'blazor-resources-/' cache deleted");
    });
</script>

通过执行此操作,缓存存储将在每次页面加载时(即 Blazor 初始化之前)被清除。

完整答案

我认为最好根据上下文来控制它的行为。 对于 DebugRelease 配置中的基本情况,假设您在 ASP.NET Core 上托管 Blazor WASM 应用程序,请执行以下步骤:

  • index.html 文件从 Client WASM 项目复制到 Server 项目上,位于您可能拥有的 Pages 文件夹中。就我而言,我已将其复制到 ./Pages/
  • 将文件重命名为 _Host.cshtml 或适合您的名称。
  • 打开这个新文件。现在,我们将在其中声明,如果此页面来自路由上下文,则这是根页面,并且我们将添加“清除缓存”逻辑,具体取决于我们实际上是否处于“调试模式”。您的文件内容可能如下所示:

@page "/" @{ Layout = ""; //Force no Layout bool clearCache = false; #if DEBUG clearCache = true; #endif } @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" /> <title>MyProject</title> <base href="/" /> <link href="css/bootstrap/bootstrap.min.css" rel="stylesheet" /> <link href="css/app.css" rel="stylesheet" /> <link href="Beeworking.Client.styles.css" rel="stylesheet" /> </head> <body> <div id="app">Loading...</div> <div id="blazor-error-ui"> An unhandled error has occurred. <a href="" class="reload">Reload</a> <a class="dismiss">🗙</a> </div> @if (clearCache) { <script type="text/javascript"> caches.delete("blazor-resources-/").then(function (e) { console.log("'blazor-resources-/' cache deleted"); }); </script> } <script src="_content/Microsoft.AspNetCore.Components.WebAssembly.Authentication/AuthenticationService.js"></script> <script src="_framework/blazor.webassembly.js"></script> </body> </html>


现在在

Server
    项目的
  • Startup.cs

    文件中: 变化: endpoints.MapFallbackToFile("index.html"); 致:

    endpoints.MapFallbackToPage("/_Host");
    

    如果不起作用,您可能必须指定 
    Razor 视图
  • 的根搜索路径。在
  • ConfigureServices

    中,将 AddRazorPages 更改为适合当前配置的内容以查找起始视图: services.AddRazorPages(options => options.RootDirectory = "/Pages");

    就是这样!
  • 。如果一切顺利,您的 Blazor WASM 索引页面现在将是启动时的 CSHTML 页面,并且由于我们有条件地注入清除缓存代码,因此缓存将在每次页面加载时被清除,但当应用程序启动时,该行为将不会出现。以
  • Release

    配置模式发布或构建。

  • 发布后,在 wwwroot/_framework/Blazor.boot.json 处有一个文件

0
投票

{ “cacheBootResources”:

...

清除客户端浏览器上的缓存。

有一种手动方式: Shift + F5。


0
投票

© www.soinside.com 2019 - 2024. All rights reserved.