この点で、Azureがあなたに何かをしているとは思いません。リソースに必要なキャッシュプロパティを正確に指定する必要があるのは問題です。
WebAPIを使用すると、プロパティCacheControlHeaderValue
を介してアクセスできるを介して、応答が持つキャッシュプロパティを制御できmyHttpResponseMessage.Headers.CacheControl
ます。
次のようなコントローラーアクションがあったと仮定します。
public Foo Get(int id)
{
Foo myFoo = LoadSomeFooById(id);
return myFoo;
}
キャッシングを明示的に制御するには、次のようなことを行う必要があります。
public HttpResponseMessage Get(int id)
{
Foo myFoo = LoadSomeFooById(id);
HttpResponseMessage myHttpResponseMessage = this.Request.CreateResponse(HttpStatusCode.OK, myFoo)
CacheControlHeaderValue cacheControlHeaderValue = new CacheControlHeaderValue();
cacheControlHeaderValue.Public = true;
cacheControlHeaderValue.MaxAge = TimeSpan.FromMinutes(30);
myHttpResponseMessage.Headers.CacheControl = cacheControlHeaderValue;
return myHttpResponseMessage;
}
期待するキャッシュに関連する他の多くのプロパティもCacheControlHeaderValue
クラスで使用できます。これは最も基本的な例にすぎません。
また、私の例は非常にブルートフォース/単純であり、すべてのキャッシング動作/ロジックがアクションメソッドに含まれていることを覚えておいてください。よりクリーンな実装はActionFilterAttribute
、属性設定に基づいてすべてのキャッシングロジックを含み、それをに適用することHttpResponseMessage
です。HttpResponseMessage
次に、よりモデル中心のアクションメソッドシグネチャに戻すことができます。これは、この場合、そのレベルでもうアクセスする必要がなくなるためです。いつものように、猫の皮を剥ぐ方法はたくさんあり、特定の問題領域に最適な方法を決定する必要があります。