Во-первых, в приложении MVC не использует директиву <%@ OutputCache %>
в представлении.Кэширование должно выполняться на уровне контроллера, а не на уровне просмотра.Используйте атрибут [OutputCache]
вместо <%@ OutputCache %>
.См. http://www.asp.net/learn/mvc/tutorial-15-cs.aspx для примера того, как это сделать.
Вы можете установить для свойства OutputCacheAttribute.VaryByCustom
какое-то пользовательское значение и проверить его из Global.asax, переопределив GetVaryByCustomString method.
Стивен Смит имеет пример этого в своем блоге .Обратите внимание, что его пример нацелен на WebForms вместо MVC, поэтому вам нужно будет использовать [OutputCache]
вместо <%@ OutputCache %>
, но общая идея та же.И вы, вероятно, захотите вернуть «аутентифицирован» или «не аутентифицирован», так как это все, что вам нужно;не похоже, что вам нужно фактическое имя пользователя, вошедшего в систему.(Кэширование вывода для каждого пользователя, как правило, является плохой идеей, так как вы быстро заполняете кэш, если вошли много пользователей.)
Особо следует отметить, что не не используют Response.WriteSubstitution () из приложения MVC.Response.WriteSubstitution () - это точка расширения, специфичная для WebForms, и ее поведение в приложении MVC не определено, поскольку MVC не выполняет конвейер WebForms полностью.Нет гарантии, что он будет работать правильно.