2016-06-28 6 views
1

をキャッシュします。DelegatingHandler私はWEBAPIエンドポイント要求に対する応答をキャッシュしようとしているHttpResponseMessage

私はショート回路がパイプラインは、以前に生成された応答を再利用DelegatingHadlerを作成し、それが動作しません。

私は間違っていますか?または私はそれを正しく行うことができますか?

public class StuffCache : DelegatingHandler 
{ 
    public const string URL_CACHED = @"/stuff-endpoint/items"; 

    ObjectCache cache = MemoryCache.Default; 

    public StuffCache() 
    { 
     cache = MemoryCache.Default; 
    } 

    protected async override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) 
    { 

     if (request.Method == HttpMethod.Get) 
     { 
      if (request.RequestUri.AbsolutePath.ToLower() == URL_CACHED) 
      { 
       HttpResponseMessage response = (HttpResponseMessage)cache["CachedItemName"]; 

       if (response == null) 
       { 
        response = await base.SendAsync(request, cancellationToken); 
        cache.Add("CachedItemName", response, null); 
       } 

       return response; 
      } 
     } 

     return await base.SendAsync(request, cancellationToken); 
    } 

} 
+0

キャッシュレスポンスヘッダ? – Legends

+0

全体の応答、すべて –

+0

はいしかし、あなたは、あなたが全体のResponseMessageをキャッシュする前にキャッシュレスポンスヘッダを追加する必要があります! – Legends

答えて

1

Cimpress.Extensions.Http.Caching.InMemoryは、HTTP GETリクエストの結果をキャッシュHttpMessageHandlerは、特に、様々なHTTP関連するユーティリティメソッドを提供していますNuGetパッケージです:

は、これが私のDHです。

DelegatingHandlerのコードはfound on GitHubすることができます。考慮すべきポイントの

一つは、特にネットワークストリーム、ストリームので、別途HttpResonseMessage.Content結果をキャッシュすることで、一度読んでのみことを意味しています。

関連する問題