Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.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
C# ASP.NET MVC Response.Cache varyheaders_C#_Asp.net Mvc_Caching_Asp.net Mvc 5.2 - Fatal编程技术网

C# ASP.NET MVC Response.Cache varyheaders

C# ASP.NET MVC Response.Cache varyheaders,c#,asp.net-mvc,caching,asp.net-mvc-5.2,C#,Asp.net Mvc,Caching,Asp.net Mvc 5.2,我有一个控制器,可以提供一些响应,我正在尝试设置缓存,如下所示 if(string.Equals( Request.Query["cached"] , "true", CultureInfo.IgnoreCase)){ Response.Cache.SetCacheability(HttpCacheability.Private); Response.Cache.SetMaxAge(TimeSpan.FromDays(1)); Response.Cache.VaryByHead

我有一个控制器,可以提供一些响应,我正在尝试设置缓存,如下所示

if(string.Equals( Request.Query["cached"] , "true", CultureInfo.IgnoreCase)){
   Response.Cache.SetCacheability(HttpCacheability.Private);
   Response.Cache.SetMaxAge(TimeSpan.FromDays(1));
   Response.Cache.VaryByHeaders["Cookie"] = true;
}
当我在Chrome中看到响应时,我看到了标题

Cache-Control: private, max-age=86400
Vary: Accept-Encoding
Vary标头可能是默认值,并且正在更改

我不想使用OutputCache,因为缓存仅对querystring参数cached=true启用。当我使用ASP.NETMVC4时,我经常看到响应

Vary:*
现在我已经将我的项目升级到ASP.NETMVC5,但是它不再工作了。我只希望根据登录名和cookies将响应缓存在浏览器(客户端)上。


<configuration>
   <system.webServer>
      <urlCompression 
          doStaticCompression="true" 
          doDynamicCompression="false" />
   </system.webServer>
</configuration>

动态压缩会剥离所有“变化”标题,禁用它会使“变化”正确显示。但现在我要处理的是如何为我们的大多数请求启用Gzip,因为在不影响Vary头的情况下无法启用动态压缩。

自2013年12月以来,您可以在不影响Vary头的情况下激活IIS动态压缩。根据您的操作系统版本,您可能需要应用修补程序

有关修补程序,请参见以下知识库


此信息基于

当通过IIS Express运行时,修补程序是否也可以工作,因为问题也发生在开发过程中。否,此修补程序似乎仅适用于IIS。热修复Win7上的IIS Express(8.0,VS 2013)在执行动态压缩时仍会丢失原始VARIE值。(刚刚测试过,我通常的设置是使用IIS,而不是IISExpress。)此解决方法确实有效,但您会失去动态压缩。如果您仍然希望具有类似动态压缩的行为,则可以设置一个非Microsoft反向代理,两者都执行动态压缩。它可能也能更好地缓存,并有助于ssl卸载。