Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 如果使用过滤器和MVC3修改自标头_Asp.net Mvc 3_Filter_Http Headers_Httpresponse_If Modified Since - Fatal编程技术网

Asp.net mvc 3 如果使用过滤器和MVC3修改自标头

Asp.net mvc 3 如果使用过滤器和MVC3修改自标头,asp.net-mvc-3,filter,http-headers,httpresponse,if-modified-since,Asp.net Mvc 3,Filter,Http Headers,Httpresponse,If Modified Since,我刚才看到了一些关于实现if-modified-since头的示例。我真的不明白它是怎么工作的。我已经看到,如果我将日期值设置为标题“Last Modified”,那么我将获得标题“if Modified Since”的值,如果我稍后检查它,对吗 而且,看起来,即使他提供了一个助手,我也必须在每一个动作中使用它 我也调查过这件事。他创建了一个过滤器来处理“If Modified Since”标题。然而,我不太明白他在那里想做什么,但正如我所看到的,如果“Last Modified”和“if Mo

我刚才看到了一些关于实现if-modified-since头的示例。我真的不明白它是怎么工作的。我已经看到,如果我将日期值设置为标题“Last Modified”,那么我将获得标题“if Modified Since”的值,如果我稍后检查它,对吗

而且,看起来,即使他提供了一个助手,我也必须在每一个动作中使用它

我也调查过这件事。他创建了一个过滤器来处理“If Modified Since”标题。然而,我不太明白他在那里想做什么,但正如我所看到的,如果“Last Modified”和“if Modified Since”标题为空,那么它将读取为dateModified=true,然后它将不会在过滤器内执行任何操作。因此,我认为这取决于在每个操作中设置这些标题值

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

根据“上次修改的实体头字段指示原始服务器认为变体上次修改的日期和时间。”例如:如果你的观点是关于一篇博文,你可以发送上次编辑或修改的日期。它通常用于缓存

关于如果修改自,此标头允许Web服务器发送304状态,而不是带正文的200状态。意思是:“此网页未更改,无需再次下载。”


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

我将向您解释标题会发生什么,以及我在C#中如何解决它:

  • 您可以将最后一次修改指定为服务器响应

    在C#中,这是通过覆盖所需控制器上的OnActionExecuting函数来实现的。例如,我就是这样做的:

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

  • 现在,当您第一次访问该页面时,您将得到一个响应标题,如
    上次修改:Wed,01 Sep 2004 13:24:52 GMT
    。下次访问该页面时,如果自2004年9月1日星期三13:24:52 GMT起修改,则应在请求标题中看到此


希望这有帮助

,这意味着每当与此视图或边界相关的实体发生更改时,我应该设置上次修改的标题?例如,假设一篇新文章出现在该博客中,这意味着该博客中的文章数量发生了变化;因此,我是否应该为上次修改的标题发送新日期?我还听说不是所有的浏览器都支持If-Modified-Since标题,但我不知道这是不是真的。页面已更改,因此必须发送新的“上次修改”值。If Modified Since是一个请求头,所有主要浏览器都支持并发送它。@MorganSoren请告诉我答案是否有用。我最关心的是如何实现它。对于我问题中给出的帖子,似乎我可以通过编程在每个操作中添加If-Modified-Since响应头。但是,我不知道这是否是最好的方法,我想我可以给出一个答案,告诉我必须在我的大多数操作方法中发送这些标题(如果我想使用它),或者建议我解决这个问题。上帝,我在一百万年前问过这个问题。我花了一段时间才明白我在问自己什么。无论如何,我理解你的答案,现在似乎比那时简单。