将OutputCache与MVC一起使用时,sub.domain.com会给我www.domain.com缓存页面

时间:2012-03-09 20:38:57

标签: asp.net-mvc asp.net-mvc-routing outputcache asp.net-mvc-areas

我有一个ASP.NET MVC应用程序,它使用区域来提供不同的功能,具体取决于击中哪个URL。例如

  • www.domain.com - 网站区域
  • app.domain.com - 应用领域
  • * .domain.com - 客户专区

所以,重点是根据传入的URL,我们将您路由到不同的MVC区域。这一切都是使用带有一些扩展的路由完成的,并且效果很好。

现在,如果我在我的www默认路由的Index()Action上启用outputcache,下次我点击app.domain.com时,我会获得www域的缓存版本。我使用fiddler进行了检查,响应是200 OK,所以它肯定会打到服务器上。但是,我的自定义路由中的日志记录告诉我它没有达到该代码。

那么,OutputCache不能基于uri工作而是使用其他算法吗?

由于

2 个答案:

答案 0 :(得分:2)

[OutputCache(VaryByHeader =“Host”)]应该有所帮助。

答案 1 :(得分:0)

行为取决于您决定存储缓存的位置(Location属性)。如果您将缓存存储在服务器上(OutputCacheLocation.Server),那么执行操作的结果将存储在服务器上,当对此操作发出后续请求时,服务器将被命中,它将直接命中返回缓存版本而不执行控制器操作,这是您描述的行为。

如果将缓存存储在客户端(OutputCacheLocation.Client)上,则缓存将保留在客户端浏览器上。在这种情况下,如果对同一操作发出后续请求,则客户端将不再命中服务器,而是直接从其缓存中提供该页面。请记住,如果您在浏览器中点击 F5 ,您将使给定页面的缓存失效,因此服务器将被命中。