0

キャッシュされたすべてのページがユーザーのためにキャッシュされるように、すべての出力キャッシュページでWebサイトを呼び出すconsolアプリを実行したいと思います。ブラウザを使用すると、ページは正しくキャッシュされますが、ユーザーのすべてのページをキャッシュする関数を実行できるようにしたいと思います。

私は使用してnew System.Net.WebClient().DownloadString("http://url");いますが、この呼び出しを使用するとページはキャッシュされません。

キャッシュ属性

[ChildActionOutputCache(("CacheAll"), Location = OutputCacheLocation.Server)]

属性関数

public class ChildActionOutputCacheAttribute : OutputCacheAttribute
    {
        public ChildActionOutputCacheAttribute(string cacheProfile)
        {
            var settings = (OutputCacheSettingsSection)WebConfigurationManager.GetSection("system.web/caching/outputCacheSettings");
            var profile = settings.OutputCacheProfiles[cacheProfile];
            Duration = profile.Duration;
            VaryByParam = profile.VaryByParam;
            VaryByCustom = profile.VaryByCustom;
        }
    }

属性のweb.configプロパティ

 <caching>
      <outputCacheSettings>
        <outputCacheProfiles>
          <add name="CacheAll" 
               duration="43200"
               location="Server"
               varyByParam="*"/>
        </outputCacheProfiles>
      </outputCacheSettings>
    </caching>
4

1 に答える 1

0

これは古い質問であることは知っていますが、コンソール アプリケーションによって行われたリクエストに対して出力キャッシュが機能しない理由をグーグルで調べている他の人にとっては、答えは Cookie です。

作成しているリクエストには Cookie がなく、サーバーからの応答には新しい Cookie があるため、出力はキャッシュされません。

この回答のコードを使用してリクエストを行うと、すべてが正常にキャッシュされます: https://stackoverflow.com/a/3892075

私がしなければならなかったことは、アプリケーションのホームページにリクエストを出すことでした。これにより、セッション Cookie が返された状態でセッションがソートされました。これらの Cookie はその後のリクエスト (キャッシュしたいページ) に追加され、すべてが期待どおりに機能しました。

于 2015-10-13T12:37:09.580 に答える