2010-09-24 2 views
0

Я пытаюсь кэшировать вывод действия контроллера в MVC2, как это:MVC OutputCache вопрос

[OutputCache(Duration = 600, VaryByParam = "id", Location=System.Web.UI.OutputCacheLocation.Server)] 
     public FileContentResult GetImage(int id) { 
} 

Когда пользователь загружает новый образ для своей иконы я аннулирую кэш, используя следующую строку:

HttpResponse.RemoveOutputCacheItem("/MyPage/GetImage/" + u.UserID.ToString()); 

Однако это не похоже на работу, и я не могу понять, почему

+0

Ваш код выглядит правильно. Можете ли вы проверить, что 'u.UserID.ToString()' возвращает правильный идентификатор? – Buildstarted

+0

Да, это определенно возвращает правильный идентификатор – Gazeth

ответ

0

Я не уверен, что, но мне кажется, что даже если вы используете «Location = сервер» может все-таки кэш в кли (как будто вообще не было атрибута outputCache), если нет также «NoStore = true».

Как таковая проблема может быть результатом кеширования на стороне клиента.

Вы можете проверить, действительно ли это так, путем изучения запросов на стороне клиента с помощью инструментов отладки, таких как скрипач или те, которые встроены в браузеры.

+0

Чтобы убедиться в этом, используйте сетевой интерфейс вашего браузера (net) и найдите статус 304 для вызова GetImage. 304 означает, что браузер не возвращается на сервер. Чтобы преодолеть это, вы можете добавить временную метку в качестве дополнительного параметра для вызова. –

+0

@Steve При добавлении дополнительного параметра обязательно будет принудительно запрашивать изображение непосредственно, он будет делать это даже тогда, когда изображение также не было изменено, что противоречит тому, что он поместил атрибут OutputCache на первое место. –

+1

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