Próbuję użyć OutputCaching w mojej witrynie ASP.NET MVC. Problem polega na tym, że gdy próbuję zmienić wartość jednego z moich parametrów, zwraca dane dla pierwszego żądanego elementu!Buforowanie nie działa poprawnie na mojej stronie ASP.NET MVC?
Oto mój kod (z nazwiskami param zmienione) ...
[ApiAuthorize]
[HandleErrorAsJson]
public class SearchController : Controller
{
[AcceptVerbs(HttpVerbs.Get)]
[OutputCache(Duration = 60, VaryByParam = "*")]
public ActionResult ScoreCard(string foo, byte? bar, byte? pewpew)
{
..
}
}
- UWAGA 1: ApiAuthorize - atrybut niestandardowy, który sprawdza na param kwerendy o nazwie 'Klucz' i sprawdza in słowniku pamięci aby sprawdzić, czy istnieje.
- UWAGA 2: HandleErrorAsJson - atrybut niestandardowy, który zwraca komunikat o błędzie jako json, jeśli wyjątek został/zostanie zgłoszony.
a oto dwie rozmowy Przykładowe robię do tej akcji: -
- /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
więc dane z pierwszej rozmowy (foo = cześć świat, Pew Pew) jest zwracany jako 200 OK. Następnie drugie wywołanie api zwraca wartość 200 OK, ale dane z poprzedniego połączenia.
Ponadto nie używam żadnego serwera proxy. Jeśli skomentuję atrybut OutputCache, wszystko jest w porządku.
Próbowałem zostały również następujące (wykaz ręcznie za każdym razem muszę cache) .....
[OutputCache(Duration = 60, VaryByParam = "foo,key,bar,pewpew")]
Nie traf :(
Wskazówki, jak muszę się upewnić, że włącz klucz API "Klucz" jako część klucza unikalnego w pamięci podręcznej. Nie chcę, aby ludzie szukali tego samego, ale jeśli druga osoba nie ma odpowiedniego klucza, nie powinni otrzymywać wyników z pamięci podręcznej , ale komunikat o błędzie (z technicznego punktu widzenia jest to 401 nieautoryzowane, ale tak czy inaczej) ...
Ty ghts?
+1 bardziej bezpośrednio koncentruje się na pytaniu w zasięgu ręki. chociaż nie sądzę, że to jedyny problem, jaki ma tutaj. odpowiedział również na twój komentarz poniżej. – dove