Я пытаюсь использовать OutputCaching на моем веб-сайте ASP.NET MVC. Проблема в том, что когда я пытаюсь изменить значение одного из параметров моего запроса, он возвращает данные для первого элемента, который был запрошен!Кэширование не работает прямо на моем веб-сайте ASP.NET MVC?
Вот мой код (с именами Param изменены) ...
[ApiAuthorize]
[HandleErrorAsJson]
public class SearchController : Controller
{
[AcceptVerbs(HttpVerbs.Get)]
[OutputCache(Duration = 60, VaryByParam = "*")]
public ActionResult ScoreCard(string foo, byte? bar, byte? pewpew)
{
..
}
}
- Примечание 1: ApiAuthorize - пользовательский атрибут, который проверяет наличие строки запроса паров под названием 'Key' и проверяет в словаре памяти, чтобы узнать, существует ли она.
- ПРИМЕЧАНИЕ 2: HandleErrorAsJson - настраиваемый атрибут, который возвращает сообщение об ошибке как json, если выбрано/было выбрано исключение.
и вот два примера вызовов я готовлю к этому действию: -
- /GET http://api.MySite.com/search/scorecard?foo=hello+world,+PewPew&key=abcd1234&bar=2
- /GET http://api.MySite.com/search/scorecard?foo=invalid+search+stuff&key=abcd1234&bar=2
поэтому данные из первого вызова (Foo = hello world, Pew Pew) возвращается как 200 OK. Затем второй вызов api возвращает 200 OK, но с данными предыдущего вызова.
Кроме того, я не использую прокси-сервер. Если я прокомментирую атрибут OutputCache, все хорошо.
Я также попытался следующие (вручную перечисляя каждый раз, когда мне нужно кэш) .....
[OutputCache(Duration = 60, VaryByParam = "foo,key,bar,pewpew")]
Не везёт :(
Обратите внимание, как мне нужно, чтобы убедиться, что я включите параметр API «Key» как часть уникального ключа кеша. Я не хочу, чтобы люди искали то же самое, но если у второго человека нет правильного ключа, они не должны получать кешированный результат , но сообщение об ошибке (технически, это 401 Not Authorized, но в любом случае) ...
Thou ghts?
+1 более непосредственно сфокусированный на вопросе под рукой в порядке. хотя я не думаю, что это единственная проблема, которую он имеет здесь. ответил на ваш комментарий ниже. – dove