缓存ASP.NET HTTP Handler服务器和客户端的响应

时间:2010-03-11 16:23:29

标签: asp.net iis caching httphandler

是否可以在服务器和客户端上缓存http处理程序的响应?

这似乎没有做到这一点:

_context.Response.Cache.SetCacheability(HttpCacheability.Public);  _context.Response.Cache.SetExpires(DateTime.Now.AddDays(7));

_context是作为IHttpHandler实现上的ProcessRequest方法的参数传递的HTTPContext。

有什么想法吗?

更新:客户端会缓存通过httphandler加载的图像,但如果另一个客户端执行相同的调用,则服务器尚未缓存它。因此,对于要求图像的每个客户端,服务器都会转到数据库(和文件流)。如果我们使用aspx页面而不是httphandler和缓存配置文件,那么图像将缓存在客户端和服务器上。

2 个答案:

答案 0 :(得分:4)

使用IIS7,可以在web.config中完成。

例如,假设您的ashx网址为:

  

/ashxfiles/myhandler.ashx

...你希望通过查询字符串参数来改变:

  

id,lang

将以下内容添加到您的web.config:

<location path="ashxfiles">
    <system.webServer>
        <caching>
            <profiles>
                <add extension=".ashx" policy="CacheForTimePeriod" duration="00:00:10" varyByQueryString="id, lang" />
            </profiles>
        </caching>
    </system.webServer>
</location>

此规则适用于目录中的所有.ashx文件,因此如果您需要更精细地控制缓存设置,则可能需要将.ashx文件放在单独的文件夹中。

答案 1 :(得分:3)

感谢您在评论中的回答。

Cache.SetCacheability用于定义是否允许代理或客户端缓存,而不是在服务器上。

查看IIS 7,其中解释了如何在服务器上缓存HTTP处理程序的输出。