29

私はプロプライエタリ ライブラリに対して開発を行っており、HttpWebRequest. ライブラリは、以下のコードと同等のコードを使用してリクエストを行います。

var request = WebRequest.Create("http://example.com/") as HttpWebRequest;

request.CachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.CacheIfAvailable);

各応答は異なりますが、外部リソースはキャッシュを禁止していません。したがって、私は毎回同じ応答を得ることになります。

HttpWebRequestキャッシュの内容をクリアする方法はありますか? 適切な解決策は、外部ソースを修正するか、おそらくキャッシュ ポリシーを変更することですが、どちらも不可能です - したがって、質問です。

キャッシュをクリアするとさまざまな影響が生じる可能性があるため、リソースごとにキャッシュを無効にすることをお勧めします。

4

5 に答える 5

15
public static WebResponse GetResponseNoCache(Uri uri)
{
        // Set a default policy level for the "http:" and "https" schemes.
        HttpRequestCachePolicy policy = new HttpRequestCachePolicy(HttpRequestCacheLevel.Default);
        HttpWebRequest.DefaultCachePolicy = policy;
        // Create the request.
        WebRequest request = WebRequest.Create(uri);
        // Define a cache policy for this request only. 
        HttpRequestCachePolicy noCachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.NoCacheNoStore);
        request.CachePolicy = noCachePolicy;
        WebResponse response = request.GetResponse();
        Console.WriteLine("IsFromCache? {0}", response.IsFromCache);            
        return response;
}

NoCacheNoStore へのリクエストに Cache Policy を HttpWebRequest に設定できます。

于 2009-03-12T03:22:13.383 に答える
13

HttpWebRequestSystem.Net.Cache.RequestCacheキャッシングに使用します。これは抽象クラスです。Microsoft CLR での実際の実装は、Microsoft.Win32.WinInetCacheその名前が示すように、キャッシュにWinInet関数を使用するものです。

これは Internet Explorer で使用されるものと同じキャッシュであるため、IE の [閲覧の履歴の削除] ダイアログを使用してキャッシュを手動でクリアできます。(WinInet キャッシュをクリアすることで問題が解決することを確認するために、最初にこれをテストとして実行してください。)

WinInet キャッシュをクリアすることで問題が解決すると仮定すると、DeleteUrlCacheEntry WinInet APIを P/Invoking することにより、プログラムでファイルを削除できます。

public static class NativeMethods
{
    [DllImport("WinInet.dll", PreserveSig = true, SetLastError = true)]
    public static extern void DeleteUrlCacheEntry(string url);
}
于 2012-06-16T05:41:24.690 に答える
1

私は試していませんが、解決策は、要求されている URL に任意のクエリ文字列を追加することです。

このクエリ文字列は、おそらく DateTime.Now を使用して毎回変更され、URL が毎回異なることを意味します。その後、各リクエストはおそらく新たにリクエストされます。

于 2012-04-01T20:55:02.687 に答える
0

キャッシュ ポリシーを変更できます。http リバース プロキシを使用し、関連する http ヘッダーを削除または変更します。これはハックですが、非常に簡単に機能します。このタスクには (mod_proxy を使用して) Apache httpd サーバーを使用することをお勧めします。

于 2009-08-14T19:22:07.857 に答える