2010-11-12 2 views
3

В моем приложении я буду помнить выбор языка пользователя в сеансе. Проблема заключается в том, что я использую выходной кеш, тогда функция языка изменения не будет работать, потому что она кэширует результат, когда я извлекаю из базы данных в соответствии со значением Session ["lang"].Как я могу использовать outputcache в этой ситуации?

Итак, если у меня есть другой способ использования функции кеша? Или как уменьшить время отклика?

ответ

1

Часть инфраструктуры кэширования выходных данных - это механизм VaryBy, который позволяет указать, что ASP.NET поддерживает параллельные кеши одной и той же страницы, измененные некоторой частью данных, например, querystring. В этом случае механизм VaryByCustom может быть самым простым в реализации. Here's a short article with a good example.

Во-первых, атрибут кэширования:

[OutputCache(CacheProfile = "CachedPage")] 
public ActionResult Index() 
{ 
    return View(); 
} 

Профиль кэша:

<caching> 
    <outputcachesettings>    
     <outputcacheprofiles> 
      <add varybycustom="Language" 
       varybyparam="*" 
       duration="86400" 
       name="CachedPage" /> 
     </outputcacheprofiles> 
    </outputcachesettings> 
</caching> 

И, наконец, эта логика в Global.asax.cs:

public override string GetVaryByCustomString(
    HttpContext context, 
    string arg) 
{ 
    if (arg == "Language") 
    { 
     return Session["lang"].ToString(); 
    } 
    else 
    { 
     return base.GetVaryByCustomString(context, arg); 
    } 
} 

сейчас для каждого возможного уникального значения, возвращаемого Session["lang"], ASP.NET будет хранить кешированный c opy страницы, которая выполняется под этим параметром.

+0

я до этого читал что-то вроде этого, но это, кажется, не работает, он всегда кэширует результат. – MemoryLeak

+1

@MemoryLeak при правильной реализации Я заверяю вас, что это работает очень хорошо. –

+2

Я нашел Context.Session null, он не должен быть пустым! Что происходит ? – MemoryLeak

-1

Сохранить это значение в куки, сессии не доступны в GetVaryByCustomString

+0

Это должно быть комментарий. –

Смежные вопросы