【问题标题】:asp.net core 3 Response Caching Not Working As Expectedasp.net core 3 响应缓存未按预期工作
【发布时间】:2020-10-20 00:05:12
【问题描述】:

我对 ASP.NET Core 3 比较陌生,我正在围绕 CMS 构建一个简单的概念证明。我试图证明我们能够缓存静态内容(.jpg、.png 等),但阻止缓存动态(从数据库传递到模型的内容)。静态内容似乎工作正常。但是,即使响应标头设置正确,动态内容也会被缓存。

从 Microsoft Edge 开发人员工具中看到的我的响应标头是:

缓存控制:无缓存、无存储、必须重新验证 内容类型:文本/html;字符集=utf-8 日期:2020 年 6 月 29 日星期一 18:25:58 GMT 过期:0 杂注:无缓存 服务器:红隼 状态:200

此时,我没有使用

app.UseResponseCaching();

我只将它用于 Startup.cs 中的静态文件

app.UseStaticFiles(new StaticFileOptions // for wwwroot files
            {
                OnPrepareResponse = (context) =>
                {
                    var headers = context.Context.Response.GetTypedHeaders();

                    headers.CacheControl = new CacheControlHeaderValue
                    {
                        Public = true, 
                        MaxAge = TimeSpan.FromDays(30)
                    };
                }
            });

还有这个

services.AddMvc(options =>
            {

                options.Conventions.Add(new RouteTokenTransformerConvention(
                         new SlugifyParameterTransformer()));
                options.CacheProfiles.Add("Default0", new CacheProfile()
                {
                    NoStore = true, 
                     Location = ResponseCacheLocation.None,
                     Duration = 0
                });
            })

...将此添加到我的 Controller 类中

[ResponseCache(CacheProfileName = "Default0")]
    public class CmsController : CmsControllerBase<CmsPageModel>

...为了更好的衡量,我还直接将它放在了我的视图中:

@using Microsoft.Net.Http.Headers;
@using Microsoft.AspNetCore.Http;
@model CMS.Web.Models.CmsPageModel
@{
    this.Context.Response.Headers[HeaderNames.CacheControl] = "no-cache, no-store, must-revalidate";
    this.Context.Response.Headers[HeaderNames.Expires] = "0";
    this.Context.Response.Headers[HeaderNames.Pragma] = "no-cache"; 
}

我在浏览器上按了 F5 几次,无论我做什么,相同的缓存内容都会返回,直到我重新构建应用程序并重新启动它。有什么想法的程序员朋友吗?

【问题讨论】:

  • 您能告诉我哪些缓存内容会返回吗?您是否在您的 asp.net 核心应用程序中使用了内存缓存?如果可能,请更新相关代码。
  • 虽然我使用了一些内存缓存(在这篇文章之前),但我已经删除了它。我不知道我的代码中正在执行任何其他显式缓存。正在缓存的内容是从数据库返回的基本 HTML 内容 - 请注意,我没有使用任何查询缓存。我使用 EF Core 作为 ORM,但同样,我没有在那里使用任何显式缓存。我想知道某处是否发生了一些隐式缓存......
  • 您的意思是您的浏览器中已经缓存了 MVC 主页索引操作的响应?
  • 我不清楚究竟什么会被缓存,因为我对缓存的理解表明页面上显示的内容不应该被缓存。但是,结果是响应中显示的内容似乎以某种方式被缓存。无论是响应还是浏览器,我都不清楚。可能是时候对缓存进行概念验证了:(

标签: c# asp.net-core caching browser


【解决方案1】:

我一直无法明确地弄清楚这一点,但解决方案的形式是从运行代码的目录中删除所有文件,然后重新构建整个解决方案。看起来可能有一些旧的缓存相关文件被解决方案抛弃,但显然仍能影响应用程序。

【讨论】:

    猜你喜欢
    • 2018-06-05
    • 2017-12-29
    • 2016-05-02
    • 1970-01-01
    • 2013-08-20
    • 2022-07-08
    • 2014-08-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多