0

在我的 ASP.NET MVC 2 应用程序中,我有以下几行:

Response.Cache.SetMaxAge(TimeSpan.FromDays(90));
Response.Cache.SetETag(lastWriteTime.Value.Ticks.ToString());

使用 Fiddler 跟踪 HTTP 流,我可以看到:

ETag: 634473035667000000

在 IIS7 下运行时在响应标头中,但是当我在 Visual Studio 2010 Web 服务器下运行时,此标头只是...消失了。无论我是通过 Response.Cache.SetETag() 还是通过 Response.AppendHeader("ETag", etag) 设置它,它都不会被返回。

这是 IIS Web 服务器的“功能”吗?我错过了一些配置设置吗?如果我必须附加到 IIS 进程才能调试任何东西,这将使测试缓存失效有点繁琐......

编辑:看起来尽管调用了 Response.Cache.SetCacheability(HttpCacheability.Public),VS/Cassini 总是返回将 HTTP Cache-Control 设置为“私有”的资源......这有帮助吗?

4

2 回答 2

5

如果您使用 ETag 将被抑制HttpCacheability.Private

您可以找到有关为什么 HttpCacheability.Private 抑制 ETags 的更多信息?

如果您将其更改为HttpCacheability.ServerAndPrivate它应该可以工作

于 2011-07-26T19:49:02.427 回答
4

很简单——这是卡西尼。

Cassini 并不是要成为生产服务器,而是为了方便调试(这就是它也覆盖缓存的原因 - 毕竟,如果您重新编译并重新运行,您是否希望您的新代码不会因为页面被缓存而被触及?)

如果您希望您的调试像在 IIS 中一样工作,那么IISExpress就是您应该去的地方......那里没有附加问题,因为它会启动一个真实的 IIS 实例,但在您自己的用户上下文中。

于 2011-07-26T19:48:11.157 回答