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 が ETag を抑制する理由を参照してください。

に変更すると、HttpCacheability.ServerAndPrivate動作するはずです

于 2011-07-26T19:49:02.427 に答える
4

シンプル - カッシーニです。

Cassini は実稼働サーバーとして意図されたものではありませんが、デバッグを容易にするために存在します (キャッシュもオーバーライドするのはそのためです。結局のところ、再コンパイルして再実行する場合、ページがキャッシュされているため、新しいコードに手を加えたくないでしょうか?)

デバッグを IIS の場合と同じように機能させたい場合は、IISExpressを使用する必要があります。IIS の実際のインスタンスをスピンアップするため、アタッチの問題はありませんが、独自のユーザー コンテキストで実行されます。

于 2011-07-26T19:48:11.157 に答える