我在 ISS 运行一个 MVC3 网站。我们有一个从数据库中获取图像的控制器。实际获取哪个图像取决于请求的主机名,例如http://hostA.site.com/image/23返回与http://hostB.site.com/image/23不同的图像,即使两者都url 引用 IIS 中的相同应用程序。
在启用缓存之前,这可以正常工作。我使用以下代码来允许在服务器和客户端上进行缓存:
Response.Cache.SetExpires(DateTime.Now.AddHours(1));
Response.Cache.SetCacheability(System.Web.HttpCacheability.Public);
这会导致 IIS 缓存响应,这正是我们想要看到的。然而,IIS 在缓存时似乎并没有区分不同的主机名。当我第一次获取http://hostA.site.com/image/23时,对http://hostB.site.com/image/23的后续调用会导致 IIS 返回从前一个请求缓存的图像。我认为发生这种情况是因为 IIS 认为这些请求是相同的,因为它们具有相同的站点和相同的 URI。
有没有人知道一种方法来完成这项工作,而不必为每个主机创建不同的应用程序?我现在已经为 Private 设置了 Cacheability,但我真的很想让 IIS 缓存这些图像。