2

我有一个ASP.NET MVC应用程序,它使用区域来传递不同的功能,具体取决于使用哪个URL。例如在MVC中使用OutputCache时,sub.domain.com给了我www.domain.com缓存页面

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

所以,问题是,取决于传入的网址,我们会将您路由到不同的MVC区域。这一切都使用路由与一些扩展和伟大的工作。

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

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

感谢

回答

0

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

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

+0

感谢您的回复。它被设置为默认值,假设它被设置为服务器。我仍然认为这是不正确的,因为它正在返回不同动作的缓存版本(sub.domain.com返回www.domain.com缓存页面)。 – James 2012-03-10 08:41:24

+0

@詹姆斯,的确,这看起来不正确。您提到了路由的一些自定义代码。你能证明这是如何完成的吗? – 2012-03-10 09:33:51

+0

我使用DomainRoutes http://blog.maartenballiauw.be/post/2009/05/20/ASPNET-MVC-Domain-Routing.aspx来限制路由到某些域。这些路线在每个区域注册中注册 – James 2012-03-12 10:42:25

1

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

相关问题