В ASP.NET возможно ли выводить кеш по имени хоста? т.е. varbyhost или varbyhostheader? - PullRequest
7 голосов
/ 11 мая 2010

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

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

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

Теперь, если я зайду на .com, сайт будет тематически синим. Если я зайду на сайт .com.au, он будет тематическим красным.

И данные для одного и того же результата поиска различаются в зависимости от имени хоста: результаты в США для .com и результаты в Австралии для .com.au.

Если я хочу использовать OutputCaching, это можно обработать и разбить по имени хоста?

Я обеспокоен тем, что после того, как человек заходит на сайт .com (правильно возвращающий результаты в США), второй человек, посещающий сайт .com.au и ищущий те же данные, получит тему и результаты для .com сайт.

Возможно ли кэширование?

Ответы [ 2 ]

11 голосов
/ 31 января 2011

Да, вы можете «варьироваться по индивидуальному заказу». Я использую то же самое:

Поместите в ваш 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();
}
4 голосов
/ 11 мая 2010

Проверьте параметр 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 и вернуть ее. Каждое другое значение создает отдельный кэш.

НТН

...