2013-09-03 9 views
2

я провожу целый день, чтобы выяснить проблему, но я не мог: Вот проблема: О действии У меня есть атрибут кэш вывода:Является ли VaryByCustom неработоспособным, когда я использую его в кэше вывода или кэшировал его неправильно?

[OutputCache(Duration = 600, VaryByParam = "*", VaryByCustom = "User")] 

Также я переписал Global.asax как это:

public override string GetVaryByCustomString(HttpContext context, string arg) 
{ 
    if (arg == "User") 
    { 
     return "User=" + context.User.Identity.Name; 
    } 

    return base.GetVaryByCustomString(context, arg); 
} 

Но когда я войти в первый раз, он кэширует значения, а затем, когда я пытаюсь выйти из системы и снова войти в систему под другим пользователем я вижу, предыдущее значение в кэше. Во время отладки я проверил, что Identity.Name возвращает правильные результаты для первого пользователя, это «админ» для второго пользователя, это «kate»

ответ

12

Я нашел ответ. Мне пришлось поставить: Location = OutputCacheLocation.Server, в другом случае он кэширует на стороне клиента, что неправильно.

Так OutputCache атрибут должен выглядеть следующим образом:

[OutputCache(Duration = 600, VaryByParam = "*", VaryByCustom = "User", Location = OutputCacheLocation.Server)] 
public ActionResult Index(<my parameters>)