我有一个网站,上面有许多主机标头。主题和数据取决于主机标头,不同主机负载不同的外观站点。

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

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

现在,如果我去 .com, ,该网站以蓝色为主题。如果我去 .com.au 网站,它以红色为主题。

根据主机名:我们的结果是不同的: .com 和澳大利亚的结果 .com.au.

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

我担心一个人去 .com 站点,(正确返回我们的结果)第二个人访问了 .com.au 网站和搜索相同数据将获得主题和结果 .com 地点。

可以缓存吗?

有帮助吗?

解决方案

是的,您可以“通过自定义变化”。我正在使用相同的

将以下内容放在您的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();
}

其他提示

查看 varybycustom 参数 outputcache 指示。

要定义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”部分并将其返回。每个不同的值都会产生不同的缓存。

Hth

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top