Asp.net mvc 为什么我的ETag头可以在IIS下工作,而不能在VS2010 web服务器下工作?

Asp.net mvc 为什么我的ETag头可以在IIS下工作,而不能在VS2010 web服务器下工作?,asp.net-mvc,http-headers,cassini,etag,webdev.webserver,Asp.net Mvc,Http Headers,Cassini,Etag,Webdev.webserver,在我的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服务器下运行时,此头只是。。

在我的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.AppendHeaderETag,etag设置它,它都永远不会返回

这是IIS web服务器的一项功能吗?是否有一些配置设置我错过了?如果我必须连接到IIS进程才能调试任何东西,这将使测试缓存失效变得有点棘手


编辑:尽管调用Response.Cache.SetCacheabilityHttpCacheability.Public,VS/Cassini仍然会返回HTTP缓存控制设置为private的资源。。。这有用吗?

很简单-是卡西尼号

Cassini并不是一个生产服务器,但它是为了方便调试,这就是为什么它也会覆盖缓存——毕竟,如果您重新编译并重新运行,您是否希望您的新代码不会因为页面被缓存而被触动


如果您想让您的调试像在IIS中一样工作,那么您就应该这样做。。。这里没有连接问题,因为它将启动一个真实的IIS实例,但是在您自己的用户上下文中。

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

你可以找到更多关于


如果您将其更改为HttpCacheability.ServerAndPrivate,它应该一个接一个地工作:alt、d、p、enter、w、enter。将你的屁股连接到w3wp的速度比你说的调试快@安德鲁。。。1我知道,2它是Alt-D,P,W,Down,Down,Enter,因为在这个框上通常有多个w3wp运行,3有一大堆NServiceBus主机和其他东西在它旁边运行,这使得VS调试器之外的调试比这更复杂一些。。。但主要是我被黑客攻击了,认为它应该可以工作,但事实并非如此:卡西尼号在一些mimetype和header方面存在问题。您是否尝试过在IIS上使用IIS Express或full?啊,可怕的多w3wp场景。是哪一个?!我已经将HttpCacheability设置为HttpCacheability.Public,但是Cassini也忽略了这一点-但是你绝对正确,将它设置为ServerAndPrivate已经做到了这一点。非常感谢。