2010-05-11 9 views
4

У меня есть сайт с несколькими заголовками хостов. Тема и данные зависят от заголовка хоста, а разные хосты загружают разные сайты.В ASP.NET можно ли выводить кеш по имени хоста? т.е. varibyhost или varbyhostheader?

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

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

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

И данные разные для одного и того же результата поиска на основе имени хоста: Результаты US для .com и австралийские результаты для .com.au.

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

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

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

+1

В дополнении к ответам; Я думаю, что 'varyByHeader =" host "' должно быть достаточным, без необходимости настраиваемого изменения. – bzlm

+1

Возможный дубликат [кэша вывода ASP.NET MVC для многоуровневого приложения, зависит от имени и культуры хоста) (http://stackoverflow.com/questions/2012072/asp-net-mvc-output-cache-for-multinenant-application- change-by-hostname-and-cultu) – Michael

ответ

7

Да, вы можете "варьироваться в зависимости от обычая". Я использую то же:

Поместите следующий в вашем 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(); 
} 
+0

Хорошо работает. Благодарю. – jesperlind

4

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

НТН

+0

Чувак - это действительно помогает. Во всяком случае, я могу потратить некоторое время на изучение этого. Я вернусь через неделю или около того с некоторыми ответами, когда я получу некоторое время. Но серьезно - спасибо за идею .. это очень очень полезно !! –

+0

Рад, что это было полезно.Просто подумайте, вы можете использовать HttpContext.Current.Request.Url.Host, чтобы определить имя хоста, которое пользователь использует для подключения к вашему сайту. Затем вы можете выполнить поиск этой строки для подстроки «.com» или «.com.au» и просто вернуть ее - ASP.NET сделает все остальное. – Richard

+0

Приветствия ... У меня есть имя хоста, отсортированное (потому что наш сайт тематически называется именем хоста). Мне просто нужно некоторое время, чтобы R & D это differentbycustom ... слишком много работы ... –