4

Web API の MediaTypeFormatter 内に有効期限/キャッシュ ヘッダーを設定することは可能ですか? SetDefaultContentHeaders をオーバーライドして、expires ヘッダーを次のように設定しようとしました。

public override void SetDefaultContentHeaders(Type type, System.Net.Http.Headers.HttpContentHeaders headers, System.Net.Http.Headers.MediaTypeHeaderValue mediaType)
    {            
       headers.Expires = DateTime.Now.AddHours(24);            
    }

ただし、Expires ヘッダーは、Chrome ツールなどの Web デバッガーで表示すると、常に -1 で返されます。また、ここでは CacheControl ヘッダーを設定することはできないようです。これは、コンテンツ ヘッダーではなく応答ヘッダーであるためです (それが何を意味するにせよ)。

4

2 に答える 2

10

の設定HttpResponseMessage.Headers.CacheControlにより、Expires ヘッダーが設定どおりに発行されるようですが、設定されていない場合、Expires は -1 の値で発行されます。max-age を設定せずに設定しresponse.Headers.CacheControl = new CacheControlHeaderValue()てみてください。これは、公開されている場所であればどこでも実行できるはずです。たとえば、またはで。HttpResponseMessageApiControllerDelegatingHandler

RFC2616に従って、 CacheControlの max-age が存在する場合は Expires をオーバーライドしますが、上記のように設定するだけで機能するはずです。

Expires は HTTP 1.0 ですが、CacheControl は HTTP 1.1 であるため、これが良いアイデアであるかどうかは議論の余地があります。

于 2013-05-15T11:16:10.257 に答える
0

有効期限を定義する出力 HttpResponse オブジェクトに、対応するキャッシュ制御ヘッダーを設定する必要があります。残念ながら、WebAPI にはすぐに使用できる組み込みのサポートはありませんが、幸いなことに実装は難しくありません。例については、こちらをご覧ください: http://blog.turlov.com/2013/11/setting-cache-control-http-headers-in.html

于 2014-07-24T16:07:14.763 に答える