在ASP.NET中,是否可以通过主机名输出缓存?即VarybyHost还是Varbyhostheader?
-
25-09-2019 - |
题
我有一个网站,上面有许多主机标头。主题和数据取决于主机标头,不同主机负载不同的外观站点。
因此,让我们想象我有一个名为“ Foo”的网站,它返回搜索结果。相同的代码运行下面列出的两个站点。这是 同一服务器和网站 (使用主机标头)
www.foo.com
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
不隶属于 StackOverflow