0

我想运行一个控制台应用程序,它在所有输出缓存页面上调用一个网站,以便为用户缓存所有缓存的页面。使用浏览器时,页面缓存正确,但我希望能够运行一个为用户缓存所有页面的功能。

我正在使用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 回答