关于IIS7设置的问题。我如何为每个绑定做一个缓存?例如,我有一个站点和该站点的三个绑定。我需要为三个绑定中的每一个创建三个不同的缓存。
2 回答
用作Request.Host
缓存键的一部分。
如果您手动读取和写入缓存,则 usr 的答案是正确的。但是,您对使用 OutputCacheAttribute 的缓存键的直接控制较少。
请注意,OutputCacheAttribute
在其实现中仍然依赖于缓存键。在 ASP.NET 中,缓存的每个项目都分配有一个键,通过该键进行查找。
当您调用具有 的 Controller Action 时,会OutputCacheAttribute
根据您的请求生成缓存键;例如,如果您有一些VaryByParam
指定,则每个用户的缓存键可能不同。然后,您的 Action 返回的响应将存储在该键下的缓存中。
当下一个请求进来时,缓存键被生成,我们检查缓存以查看该键下是否已经缓存了一些东西。如果是这样,我们就返回它;否则,我们继续操作。
通过在缓存键中包含主机名,我们可以为每个绑定设置不同的缓存。如果您使用的是 OutputCacheAttribute,则可以覆盖它以允许按主机更改缓存:
public override string GetVaryByCustomString(HttpContext context, string customVary)
{
if(customVary == "Host")
{
return context.Request.Url.Host;
}
// other behaviors here if necessary
return "";
}
这将允许动态修改缓存键以包含访问站点的主机名。这意味着如果您有三个不同的绑定,您将拥有三个不同的缓存键(假设没有其他可变参数)。
以下是修改控制器操作的方法:
[MyOutputCache(VaryByParam = "None", VaryByCustom = "Host", Duration = 7200)]
public ActionResult Index()
{
// ...
return View();
}
请注意包含VaryByCustom = "Host"
,然后您的重写 OutputCacheAttribute 的GetVaryByCustomString()
方法可以看到它,因此包含在使用的缓存键中。