【问题标题】:When using OutputCache with MVC, sub.domain.com gives me www.domain.com cached page将 OutputCache 与 MVC 一起使用时,sub.domain.com 为我提供 www.domain.com 缓存页面
【发布时间】:2012-03-09 20:38:57
【问题描述】:

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

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

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

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

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

谢谢

【问题讨论】:

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


    【解决方案1】:

    [OutputCache(VaryByHeader="Host")] 应该会有所帮助。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 感谢您的回复。它设置为默认设置,因此假设它设置为服务器。我仍然认为这是不正确的,因为它返回的是不同操作的缓存版本(sub.domain.com 返回 www.domain.com 缓存页面)。
      • @James,确实,这似乎不对。您提到了一些用于路由的自定义代码。你能说明这是怎么做到的吗?
      • 我正在使用 DomainRoutes blog.maartenballiauw.be/post/2009/05/20/… 来限制到某些域的路由。这些路由在每个 AreaRegistration 中注册
      猜你喜欢
      • 1970-01-01
      • 2010-10-11
      • 1970-01-01
      • 2013-03-22
      • 2013-11-20
      • 1970-01-01
      • 2015-12-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多