я пытаюсь использовать OutputCaching на своем веб-сайте ASP.NET MVC. Проблема в том, что когда я пытаюсь изменить значение одного из моих параметров строки запроса, он возвращает данные для первого запрошенного элемента!
Вот мой код (с измененными именами параметров)...
[ApiAuthorize]
[HandleErrorAsJson]
public class SearchController : Controller
{
[AcceptVerbs(HttpVerbs.Get)]
[OutputCache(Duration = 60, VaryByParam = "*")]
public ActionResult ScoreCard(string foo, byte? bar, byte? pewpew)
{
..
}
}
- ПРИМЕЧАНИЕ 1: ApiAuthorize — настраиваемый атрибут, который проверяет параметр строки запроса под названием «Ключ» и проверяет словарь в памяти, чтобы увидеть, существует ли он.
- ПРИМЕЧАНИЕ 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 как часть уникального ключа кэша. Я не хочу, чтобы люди искали одно и то же, но если у второго человека нет правильного ключа, он должен получить не кешированный результат, а сообщение об ошибке (технически это 401 Not Authorized, но в любом случае)...
Мысли?