2

关于IIS7设置的问题。我如何为每个绑定做一个缓存?例如,我有一个站点和该站点的三个绑定。我需要为三个绑定中的每一个创建三个不同的缓存。

4

2 回答 2

1

用作Request.Host缓存键的一部分。

于 2012-11-24T19:47:47.920 回答
0

如果您手动读取和写入缓存,则 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()方法可以看到它,因此包含在使用的缓存键中。

于 2012-11-24T20:00:05.013 回答