В ASP.NET возможно ли выводить кеш по имени хоста? т.е. varby host или varbyhostheader?

У меня есть веб-сайт с несколькими заголовками. Тема и данные зависят от заголовка узла, и разные узлы загружают разные сайты.

Итак, давайте представим, что у меня есть веб-сайт под названием "Foo", который возвращает результаты поиска. Один и тот же код работает на обоих сайтах, перечисленных ниже. Это тот же сервер и веб-сайт (с использованием заголовков хоста)

  1. www.foo.com
  2. 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 и вернуть ее. Каждое другое значение создает свой кэш.

НТН

Другие вопросы по тегам