7

ASP.NET Web Api アクション内から CacheControl ヘッダーを実装しようとしています (他のライブラリを使用して、フィルター/ハンドラーでこれを行うことができますが、最初にいくつかのテストを行いたいと思います)。

次のような本の簡単な例に従っています。

var response = Request.CreateResponse<IEnumerable<string>>(HttpStatusCode.OK,emails);

response.Headers.CacheControl = new CacheControlHeaderValue();
response.Headers.CacheControl.MaxAge = TimeSpan.FromHours(1);
response.Headers.CacheControl.MustRevalidate = false;
response.Headers.CacheControl.Public = true;

return response;

このコードは、stackoverflow で提供されている他の多くの回答とほぼ同じです。

ただし、Web API はキャッシュ制御ヘッダーをまったく設定していません。何か案は?????

フィドラーで応答を見ると、キャッシュ制御がキャッシュなしに設定されているように、次のようになります。

HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Content-Type: application/json; charset=utf-8
Expires: -1
Server: Microsoft-IIS/7.5
X-AspNet-Version: 4.0.30319
X-MiniProfiler-Ids: ["b7bfde10-e8d3-455d-b40d-2f33eb285023"]
X-Powered-By: ASP.NET
Date: Sat, 25 May 2013 11:54:35 GMT
Content-Length: 24

maxage、mustrevalidate、および public の値をすべて変更しようとしましたが、すべて役に立ちませんでした...

4

1 に答える 1

3

リクエスト パイプラインをチェックして、System.Web.HttpResponseオブジェクトを介してレスポンスを操作しているものがあるかどうかを確認します (例: HttpContext.Current.Response)。経由で http Cookie を追加するSystem.Web.HttpResponseと、Web API 内で定義されたキャッシュ制御ヘッダーが消去される場合に遭遇しましたSystem.Net.Http.HttpResponseMessage

避けてみてくださいSystem.Web.HttpResponse。それが不可能な場合、ここで説明されている 1 つの回避策は、手動で Cookie ヘッダーを設定し、コレクションを完全AddHeader()に回避することです。Cookies

于 2015-05-22T18:21:25.310 に答える