如何为不同的查询字符串值配置OutputCache页面属性?

时间:2012-03-27 09:33:51

标签: asp.net asp.net-mvc asp.net-mvc-3

假设我有一个类似

的页面请求

http://localhost/accounting/products?id=234

有时它会像:

http://localhost/accounting/products?id=152

由于产品项目不经常更改,我希望将特定产品ID的每个页面缓存一小时。

因此,对于第一个请求,将对产品id = 234缓存页面,并在一小时内对产品id = 234的后续请求将从缓存中检索。产品id = 234经过1小时后的下一个请求,将从服务器检索新页面而不是从缓存中检索。等等。

我该怎么做?

3 个答案:

答案 0 :(得分:5)

查看VaryByParam

例如:

<%@ OutputCache Duration="3600" VaryByParam="id" %>

注意:正如Oenning所展示的那样,在MVC(而不是Web表单)中专门执行此操作的正确方法是归因于操作。

答案 1 :(得分:5)

Ofer Zelig的回答是正确的,但是当您使用MVC时,添加OutputCache配置的正确位置就在操作中。

[OutputCache(Duration=3600, VaryByParam="id")]
public ActionResult Products(int id)
{
    //
    return View();
}

答案 2 :(得分:0)

仅供参考,如果您有多个参数需要缓存,请用分号分隔:

// Cache 4 hours, by id and latlng
[OutputCache(Duration=60*60*4, VaryByParam="id;lat;lng")]
public async Task<ViewResult> Item(int id, double lat, double lng) . . .