В ASP.NET возможно ли выводить кеш по имени хоста? т.е. varby host или varbyhostheader?
У меня есть веб-сайт с несколькими заголовками. Тема и данные зависят от заголовка узла, и разные узлы загружают разные сайты.
Итак, давайте представим, что у меня есть веб-сайт под названием "Foo", который возвращает результаты поиска. Один и тот же код работает на обоих сайтах, перечисленных ниже. Это тот же сервер и веб-сайт (с использованием заголовков хоста)
www.foo.com
www.foo.com.au
Теперь, если я пойду .com
Сайт тематически синего цвета. Если я пойду к .com.au
сайт, тематически красный.
И данные для одного и того же результата поиска различаются в зависимости от имени хоста: результаты в США для .com
и австралийские результаты для .com.au
,
Если я хочу использовать OutputCaching
, это может быть обработано и разделено по имени хоста?
Я обеспокоен тем, что после того, как человек идет в .com
сайт, (правильно возвращающий результаты США), что второй человек, посещающий .com.au
сайт и поиск по тем же данным получит тему и результаты для .com
сайт.
Возможно ли кэширование?
2 ответа
Да, вы можете "варьироваться по индивидуальному заказу". Я использую то же самое:
Поместите следующее в ваш 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;
}
Ключ должен возвращать строковое значение для каждого экземпляра, который вы хотите кэшировать. В вашем случае ваш переопределенный метод должен будет убрать часть ".com" или ".com.au" из URL и вернуть ее. Каждое другое значение создает свой кэш.
НТН