0

jQuery AJAX から呼び出す WebMethod があります。私が何をしても、返された JSON データでキャッシュが適切に機能していないようです。C# の外観は次のとおりです。

[System.Web.Services.WebMethod(CacheDuration=3600)]
[System.Web.Script.Services.ScriptMethod(UseHttpGet = true)]
public static List<Items> FetchItems() { //code here}

Web.Config に HTTP GET のサポートを追加しました。

<webServices>
  <protocols>
    <add name="HttpGet"/>
  </protocols>
</webServices>

jQuery AJAX 呼び出しは次のようになります。

$.ajax({
    url: "/Ajax/ItemAffinity.aspx/FetchItems?ItemID=" +
        escape($("#SearchSelectedPageID").val()),
    type: "GET",
    cache: true,
    async: true,
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function (data) {
        AffinityItems = data.d;
    }
});

何をしても、キャッシュを許可する応答の HTTP ヘッダーを取得できません。

Cache-Control: no-cache
Content-Length: 918821
Content-Type: application/json; charset=utf-8
Date: Mon, 10 Dec 2012 19:40:57 GMT
Expires: -1
Pragma: no-cache
Server: Microsoft-IIS/8.0
X-Powered-By: ASP.NET

最後に、C# を介してこれらのヘッダーを設定しても、キャッシュの動作には影響がないようです。

HttpContext.Current.Response.Cache.SetExpires(DateTime.UtcNow.AddDays(10));
HttpContext.Current.Response.Cache.SetValidUntilExpires(true);
HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.Private);
4

1 に答える 1

1

これは、既定では動的データがキャッシュされないためです。

これを許可するカスタム HttpHandler の実装を次に示します。

于 2012-12-10T20:03:20.740 に答える