0

で特定の呼び出しが行われたときに、フロントエンドからキャッシュを制御したいと思いPracticeUpdateます。

たとえば、関数/api/GetAllTagsから呼び出すと、Fiddlerでcache-controlのリターンヘッダーがno-cacheに設定されていることがわかります。でこれを変更することは可能ですか?javascriptGetAllTagsapi

4

2 に答える 2

2

あなたがする必要がある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)
        };
    }
}
于 2013-01-21T21:59:13.847 に答える
0

Web APIのデフォルトのキャッシュポリシーは、キャッシュなしです。

各アクションにキャッシュを追加することも、クライアント(を使用する場合)とサーバーの両方でHTTPキャッシングを完全に実装するCacheCowなどのフレームワークを使用してそれを行うこともできます。HttpClient

于 2013-01-22T19:12:45.423 に答える