asp.net-core - 如何将 css、js 或图像文件缓存到 asp.net 核心

标签 asp.net-core asp.net-core-mvc

间歇性代理导致我的页面被我部署的 asp.net 核心站点缓存。 Web 服务器没有缓存页面。

我添加了请求和响应缓存以防止此代理导致的任何缓存

在我的 Startup.cs

        app.UseStaticFiles();

        app.UseIdentity();

        app.Use(async (context, next) =>
        {
            context.Response.Headers.Append("Cache-Control", "no-cache");
            context.Response.Headers.Append("Cache-Control", "private, no-store");
            context.Request.Headers.Append("Cache-Control", "no-cache");
            context.Request.Headers.Append("Cache-Control", "private, no-store");
            await next();
        });

我可以在 fiddler 中看到这些没有缓存头被添加到我的页面以及 javascript 文件、css 文件和图像文件中。
  • 我如何限制此无缓存 header 仅适用于 asp.net mvc 页面,以便这些无缓存 header 不会出现在 fiddler 中,用于非页面文件(如 js、css 和图像文件)
  • 对于 css 和 js 文件的 HTTP 请求,有没有一种方法可以不检查每个请求的服务器上是否存在该文件,而仅使用浏览器版本来首次获取这些文件。我问的原因是,在重负载(1000 个用户)时,我在 Fiddler 中注意到我的 css、js 和图像文件的 HTTPGET 出现 404 错误,因此我试图限制对这些资源的请求数量。当请求成功(未加载)时,我得到 304 个响应(未修改)。有没有办法告诉浏览器首先不要发出请求并使用本地缓存版本。
  • 最佳答案

    这是一种应该适合您的方法。本示例将 css 和 js 文件设置为浏览器缓存 7 天,并将非 css、js 和图像设置为没有缓存头。另一个注意事项是,只需要在响应上设置缓存控制 header 是 Asp.NET Core。

            app.Use(async (context, next) =>
            {
                string path = context.Request.Path;
    
                if(path.EndsWith(".css") || path.EndsWith(".js")) {
    
                    //Set css and js files to be cached for 7 days
                    TimeSpan maxAge = new TimeSpan(7, 0, 0, 0);     //7 days
                    context.Response.Headers.Append("Cache-Control", "max-age="+ maxAge.TotalSeconds.ToString("0")); 
    
                } else if(path.EndsWith(".gif") || path.EndsWith(".jpg") || path.EndsWith(".png")) {
                    //custom headers for images goes here if needed
    
                } else {
                    //Request for views fall here.
                    context.Response.Headers.Append("Cache-Control", "no-cache");
                    context.Response.Headers.Append("Cache-Control", "private, no-store");
    
                }
                await next();
            });
    

    关于asp.net-core - 如何将 css、js 或图像文件缓存到 asp.net 核心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37706370/

    相关文章:

    entity-framework - ASP.Net.Core 2.2 身份更改 ID 从字符串到 int

    c# - 在 Jetbrains Rider 上构建时 Blazor App CS0103 错误,而在使用 VisualStudio 时没有错误

    visual-studio-2015 - 如何使用project.json引用另一个文件夹中的本地csproj?

    visual-studio - 如何在不重新编译的情况下进行非 c# cshtml 更改并查看结果?

    c# - 在没有 BuildServiceProvider() 的情况下在 AddOpenIdConnect 中获取 ServiceProvider

    .net - Couchbase 存储桶的命名参数

    c# - 数据注释属性在 asp net core 中不起作用

    c# - ASP.NET 5 MVC 6 和 Entity Framework 7 问题

    c# - 从 .net core 2.1 中间件重定向到 Controller 操作/ View 的正确方法

    asp.net-core - 什么可能导致 `UserManager` 返回错误的用户?