1

JQuery を使用して多くのチャートとテーブルを表示するアプリケーションがあります。これらのグラフの一部は、セッションに保存された変数に基づいています (たとえば、ユーザーが別のページに値を追加し、次のページでグラフを生成しているため、ユーザー要求はパラメーターを送信しません)。

私はネット上を見回していましたが、ほとんどのソリューションはに基づいています

 [OutputCache(Duration=60, VaryByParam="someParm")]

問題は、ほとんどのリクエストがパラメーターを送信せず、セッション内の値を使用するだけであることです。

これらの種類のリクエストに対してキャッシュを有効にする方法はありますか?

編集: MVC の既定の承認属性を使用できないという複雑なセキュリティ要件があります。現在のユーザー + アクションに送信されるパラメーターに基づいてロジックを記述する必要があったため、アクション内のメソッドは、要求を続行するか、何も返さないかを決定します。これにより、キャッシングが非常に困難になります。なぜなら、OutputCache が実行された時点ではパラメーターしかなく、コンテキスト内の ID オブジェクトは空だからです。その結果、管理者権限を持つユーザーが a と b のリクエストを送信し、その後に最小限の権限を持つユーザーが a と b のリクエストを送信した場合、2 番目の人はアクションが実行されなかったため結果を確認できますが、値はキャッシュが使用されます。

この問題を解決するために、getvarybyCustome を使用しました。この関数が行うことは、より複雑なキーを作成するのに役立つユーザーのグループ名を返すことだけです。最後の例で最小権限を持つ人は、管理者のリクエスト キャッシュ キー (a,b,group_admin) とは異なるキャッシュ キー (a,b,group_less) を持っています。ただし、リクエストごとにグループ名を取得するのもコストがかかるため、Cache オブジェクトを使用してユーザーのグループをキャッシュします。セッションの開始時にユーザーのグループが AD からクエリされ、キャッシュに保存されるため、その後のリクエストのために、彼のグループ名はキャッシュから取得されます。

4

2 に答える 2

1

それまでに達成できないことがある場合VaryByParamは、試すことができますVaryByCustomここで例を見てください

于 2012-06-28T14:09:54.557 に答える
1

このリクエストをリダイレクトして、セッション パラメーターを送信する新しいコントローラー メソッドに送信することができます。これにより、将来の実装では、セッションの代わりにクエリ文字列パラメーターを使用し、コードも機能する可能性があります。

すべてのコントローラーの基本クラスでこのセッションパラメーターを変換するメソッドを作成して、変換を一度記述することができます。

于 2012-06-28T14:14:45.507 に答える