带有筛选器和 MVC3 的 If 修改自标头



我刚刚看到了一些关于实现if-modified-since标头的示例。我真的不明白它是如何很好地工作的。我已经看过这个例子,似乎如果我将日期值设置为标题"上次修改时间",那么如果我稍后检查它,我将获得标题"If-Modified-Since"的值,对吗?

还有,看来,就算他提供了帮手,我也必须在每一个动作中使用它?

我也研究了这篇文章。他创建了一个过滤器来处理"If-Modified-Since"标头。但是,我不太明白他在那里想做什么,但正如我所看到的,如果"上次修改"和"如果修改以来"标头为空,那么它会将其读取为 dateModified = true,然后它不会在过滤器内做任何事情。因此,我认为这取决于在每个操作中设置这些标题值?

最后,我

不太确定我应该如何使用它,我认为每当我对视图进行更新时,我都应该发送一个新的"上次修改时间"日期值,这是正确的方法吗?

我遇到了你的问题,你实际上帮助我解决了你遇到的同样问题。

我将向您解释标头会发生什么,以及我在 C# 中为解决它所做的工作:

  • 将"上次修改时间"指定为服务器响应。

    在 C# 中,这是通过重写所需控制器上的 OnActionExecute 函数来完成的。举个例子,这是我的做法:

        protected override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        filterContext.RequestContext.HttpContext.Response.AppendHeader("Last-Modified", "Wed, 01 Sep 2004 13:24:52 GMT");
        base.OnActionExecuting(filterContext);
    }
    
  • 就像你看到的,我已经在控制器中指定了这个,所以它将对控制器中的每个操作产生影响

  • 现在,第一次访问该页面时,您将获得类似Last-Modified:Wed, 01 Sep 2004 13:24:52 GMT 的响应标头。下次访问该页面时,您应该会在请求标头中看到此If-Modified-Since:Wed, 01 Sep 2004 13:24:52 GMT

希望这有帮助

根据 RFC 2616 "上次修改的实体标头字段指示源服务器认为上次修改变体的日期和时间。例如:如果您的观点是关于帖子博客的,您可以发送上次编辑或修改的日期。通常它用于缓存。

关于 If-Modified-Since,此标头允许 Web 服务器发送 304 状态而不是 200 与正文。它的意思是:"此网页没有更改,无需再次下载。

更多信息

最新更新