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

标签 visual-studio google-chrome caching blazor

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

最佳答案

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

<script type="text/javascript">
    caches.delete("blazor-resources-/").then(function (e) {
        console.log("'blazor-resources-/' cache deleted");
    });
</script>
通过这样做,缓存存储将在每次页面加载时清除,就在 Blazor 初始化之前。
完整答案
我认为最好根据上下文来控制它的行为。
对于 中的基本 if调试 发布 配置,假设您托管 Blazor WASM 申请 ASP.NET 核心 ,步骤如下:
  • 复制您的 index.html 来自您的 的文件客户 WASM 您的 上的项目服务器 项目,在 您可能拥有的文件夹。就我而言,我已将其复制到 ./Pages/
  • 将文件重命名为 _Host.cshtml 或者适合你的东西。
  • 打开这个新文件。如果此页面来自路由上下文,我们现在将在其中声明这是根页面,我们将添加我们的 清除缓存 逻辑取决于我们实际上在 Debug模式或不。您的文件内容可能如下所示:

  • @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>

  • 现在在您的启动.cs 文件在您的服务器 项目:
    改变:
    endpoints.MapFallbackToFile("index.html");
    
    到:
    endpoints.MapFallbackToPage("/_Host");
    
  • 如果它不起作用,您可能必须为 指定根搜索路径 Razor 意见 .在 配置服务 , 更改 添加RazorPages 到适合您当前配置的内容以找到您的起始 View :
    services.AddRazorPages(options => options.RootDirectory = "/Pages");
    
  • 就是这样 ! .如果一切顺利,您的 Blazor WASM 索引页面现在将是启动时的 CSHTML 页面,并且因为我们有条件地注入(inject)清除缓存代码,缓存将在每次页面加载时被清除,但当应用程序将不会出现该行为发布或内置 发布 配置模式。
  • 关于visual-studio - 如何在 Visual Studio Blazor Wasm 应用程序调试期间停止 Chrome 缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62611521/

    相关文章:

    php - 在数据库中找不到事件记录类 "tablename"的表 "TableClass"

    visual-studio - Mac 上的 VS+Resharper 键盘快捷键建议

    visual-studio - Eclipse 是否具有像 Visual Studio 一样的可扩展性功能而无需任何编码?

    vb.net - 如何将这个函数放在一个单独的线程中

    javascript - Google Chrome 中的 Canvas 点击区域是否仍然可用?

    caching - 亚马逊云端 : private content but maximise local browser caching

    c# - 代码花费大部分时间的地方

    javascript - 仅在需要滚动条时绘制闪烁

    javascript - 如何在 Chrome 中运行 box shadow 并在 td 标签之间添加空格

    http - 如何为云端设置缓存 header 以便 Google Pagespeed 识别它?