2

Rest API を使用してモバイル アプリを開発しています。Windows Phone 8 開発では GetResponse メソッドがサポートされていないため、非同期呼び出しを使用しています。

アプリケーションを起動すると、GET メソッドを使用して正しいデータをフェッチします。60 秒の更新間隔を実装しました。更新がトリガーされると、受け取る JSON 出力は新しいものではなく、最初にフェッチされたものです。基本的にさわやかではありません。ここでいくつかのブログを調べたところ、キャッシュの問題であることがわかりました。このキャッシュを無効にするのに助けが必要です。また、フレームワークにSystem.Net.Cacheが存在しないため、HttpRequestCachePolicyを使用できないことを確認しました(私は開発に不慣れなので、ここで間違っている場合は修正してください)

以下は私が使用しているコードです。

リクエストの作成:

string AuthServiceUri = "http://" + Authentication.ipAddress + "/api/alerts/open";
HttpWebRequest alerts_request = HttpWebRequest.Create(AuthServiceUri) as HttpWebRequest;
alerts_request.Accept = "application/json";
alerts_request.Method = "GET";
alerts_request.Headers["AuthToken"] = Authentication.authToken;
alerts_request.BeginGetResponse(new AsyncCallback(AlertsGetResponsetStreamCallback), alerts_request);

GetResponseStreamCallback:

HttpWebRequest request = (HttpWebRequest)callbackResult.AsyncState;
HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(callbackResult);
response.Headers["Cache-Control"] = "no-cache";
string responseString = "";
Stream streamResponse = response.GetResponseStream();
StreamReader reader = new StreamReader(streamResponse);
responseString = reader.ReadToEnd();
streamResponse.Close();
reader.Close();
response.Close();
string result = responseString;

コードは結果をフェッチするだけでうまく機能します。キャッシュをクリアするのに問題があるというだけです。ここで「キャッシュなし」をヘッダーに追加して正しく実装していますか? または、何か不足していますか?ヘッダーにも追加する必要がありますか?私の救世主になってください!!

4

1 に答える 1

4

最も簡単な回避策は、おそらくすべての呼び出しで uri を変更することです。これにより、キャッシュがバイパスされます。"?dummy=345" のようなパラメーターを uri に追加し、呼び出しごとにパラメーター値 (345) を変更するだけです。これは、キャッシュ メカニズムにとって新しい uri のように見え、コンテンツを取得します。

于 2015-07-17T09:43:46.547 に答える