で特定の呼び出しが行われたときに、フロントエンドからキャッシュを制御したいと思いPracticeUpdate
ます。
たとえば、関数/api/GetAllTags
から呼び出すと、Fiddlerでcache-controlのリターンヘッダーがno-cacheに設定されていることがわかります。でこれを変更することは可能ですか?javascript
GetAllTags
api
で特定の呼び出しが行われたときに、フロントエンドからキャッシュを制御したいと思いPracticeUpdate
ます。
たとえば、関数/api/GetAllTags
から呼び出すと、Fiddlerでcache-controlのリターンヘッダーがno-cacheに設定されていることがわかります。でこれを変更することは可能ですか?javascript
GetAllTags
api
あなたがする必要があるHttpResponseMessage
のは、リクエストのオブジェクトへのアクセスを取得することです。Request
これは、コントローラーのプロパティに応答を作成するように依頼することで、コントローラーアクション内で実行できます。
var response = Request.CreateResponse(HttpStatusCode.OK);
次に、次のようにCacheControl
オブジェクトにアクセスできます。Headers
response.Headers.CacheControl = new CacheControlHeaderValue
{
Public = true, MaxAge = TimeSpan.FromMinutes(5)
};
このシナリオではを使用することもできるためActionFilter
、次の属性を介してキャッシュをApiControllerアクションメソッドに適用できます。
public class HttpCacheForMinutesAttribute : ActionFilterAttribute
{
private readonly int _duration;
public HttpCacheForMinutesAttribute(int duration)
{
_duration = duration;
}
public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
{
base.OnActionExecuted(actionExecutedContext);
actionExecutedContext.Response.Headers.CacheControl = new CacheControlHeaderValue
{
Public = true, MaxAge = TimeSpan.FromMinutes(_duration)
};
}
}
Web APIのデフォルトのキャッシュポリシーは、キャッシュなしです。
各アクションにキャッシュを追加することも、クライアント(を使用する場合)とサーバーの両方でHTTPキャッシングを完全に実装するCacheCowなどのフレームワークを使用してそれを行うこともできます。HttpClient