7

我有一个有许多主机头的网站。主题和数据取决于主机头,不同的主机加载不同的站点。

所以让我们假设我有一个名为“Foo”的网站,它返回搜索结果。相同的代码运行下面列出的两个站点。它是同一服务器和网站(使用主机标头)

  1. www.foo.com
  2. www.foo.com.au

现在,如果我访问.com,该站点的主题为蓝色。如果我去.com.au网站,它的主题是红色的。

根据主机名,同一搜索结果的数据不同:美国搜索结果为 ..com澳大利亚搜索结果为.com.au.

如果我想使用OutputCaching,可以按主机名处理和分区吗?

我担心一个人访问该.com站点后,(正确返回美国结果)第二个访问该.com.au站点并搜索相同数据的人将获得该.com站点的主题和结果。

可以缓存吗?

4

2 回答 2

13

是的,您可以“因定制而异”。我正在使用相同的:

将以下内容放入您的 Global.asax.cs:

public override string GetVaryByCustomString(HttpContext context, string custom)
{
    if (custom == "Host")
    {
        return context.Request.Url.Host;
    }
    return String.Empty;
}

然后在你的控制器中:

[OutputCache(VaryByParam = "None", VaryByCustom="Host", Duration = 14400)]
public ActionResult Index()
{
    return View();
}
于 2011-01-31T12:32:37.390 回答
5

查看OutputCache指令的VaryByCustom参数。

要定义调用 VaryByCustom 时发生的情况,您需要重写 GetVaryByCustomString 方法:

public override string GetVaryByCustomString(HttpContext context, string custom)
{
    if(custom == "Your_Custom_Value")
    {
        // Do some validation.
        // Return a string for say, .com, or .com.au

    }
    return String.Empty;
}

关键是为要缓存的每个实例返回一个字符串值。在您的情况下,您的覆盖方法需要从 URL 中删除“.com”或“.com.au”部分并将其返回。每个不同的值都会产生不同的缓存。

高温高压

于 2010-05-11T08:00:07.563 回答