有关IIS7设置的问题。我如何为每个绑定做一个缓存?例如,我有一个站点和三个绑定站点。我需要为三个绑定中的每一个创建三个不同的缓存。
答案 0 :(得分:1)
使用Request.Host
作为缓存密钥的一部分。
答案 1 :(得分:0)
usr的答案是正确的。但是,使用OutputCacheAttribute对缓存键的直接控制较少。
请注意,OutputCacheAttribute
仍然依赖于其实现中的缓存键。在ASP.NET中,为每个缓存的项目分配一个用于查找它的键。
当您调用具有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 "";
}
这将允许动态修改缓存键以包含访问该站点的主机名。这意味着如果你有三个不同的绑定,你将有三个不同的缓存键(假设没有其他变化的参数)。
以下是修改Controller Action的方法:
[MyOutputCache(VaryByParam = "None", VaryByCustom = "Host", Duration = 7200)]
public ActionResult Index()
{
// ...
return View();
}
注意包含VaryByCustom = "Host"
,然后由您的覆盖OutputCacheAttribute的GetVaryByCustomString()
方法看到,因此包含在使用的缓存键中。