ASP.NETMVCWebサイトでOutputCachingを使用しようとしています。問題は、クエリ文字列パラメータの1つの値を変更しようとすると、要求された最初のアイテムのデータが返されることです。
これが私のコードです(パラメータ名が変更されています)...
[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として返すカスタム属性。
これが私がこのアクションに対して行っている2つのサンプル呼び出しです:-
- / 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)からのデータは200OKとして返されます。次に、2番目のAPI呼び出しは200 OKを返しますが、前の呼び出しのデータを使用します。
また、プロキシサーバーを使用していません。OutputCache属性をコメントアウトすると、すべて問題ありません。
私も次のことを試しました(キャッシュする必要があるたびに手動でリストします)....。
[OutputCache(Duration = 60, VaryByParam = "foo,key,bar,pewpew")]
運がない:(
キャッシュの一意のキーの一部としてAPIの「Key」パラメータが含まれていることを確認する必要があることに注意してください。同じことを検索してほしくないのですが、2人目の人が正しいキーを持っていない場合は、キャッシュされた結果ではなく、エラーメッセージが表示されます(技術的には、401 Not Authorizedですが、いずれかの方法)...
考え?