6

私は ASP.NET MVC の初心者にすぎず、特定のタスクを「正しい方法」で達成する方法がわかりません。

基本的に、ログインした userId を HttpContext.User.Identity に保存し、EnhancedAuthorizeAttributeいくつかのカスタム認証を実行するように記述しました。

オーバーライドされたOnAuthorizationメソッドでは、ドメイン モデルがデータベースにヒットし、現在のユーザー ID が渡された routeValue "BatchCode" にアクセスできるようにします。プロトタイプは次のとおりです。

ReviewGroup GetReviewGroupFromBatchCode(string batchCode);

ユーザーが ReviewGroup にアクセスできず、OnAuthorization がアクセスを拒否した場合は、null が返されます。

これで、装飾されたアクション メソッドは OnAuthorization がパスした場合にのみ実行されることがわかりましたが、ReviewGroup を再度取得するためにデータベースに 2 回アクセスしたくありません。

現時点では、ReviewGroup を格納しHttpContext.Items["reviewGroup"]、コントローラーからこれにアクセスすることを考えています。

これは実行可能な解決策ですか、それとも間違った道を進んでいますか?

ありがとう!

4

3 に答える 3

1

HttpContext.Itemsは、リクエストの期間中のみ有効です。長く持続させたい場合は、入れてください

a)セッション-良い

b)プロファイル-利点がわかりません

c)クッキー-推奨されません

d)毎回データベースにアクセスします-OKである必要があります

filterContext.RouteData.DataTokensに保存しますか?

于 2010-05-14T02:03:16.523 に答える
1

または、データベースへのアクセスを避ける最善の方法の 1 つは、キャッシュです。それを取得し、キャッシュに貼り付けます。再度必要な場合は、既にメモリ内にあり、DB ヒットは必要ありません。そうでない場合、キャッシュが範囲外になると、オブジェクトも範囲外になります。

于 2010-05-19T14:27:18.267 に答える
0

非常に大きな選択を行うReviewGroupか、巨大なデータベースを持っていない限り、2 回目のデータベース ヒットはそれほど問題にはなりません。最新のデータベースは、特に適切にインデックスが作成されたテーブルを使用すると、選択を非常に効率的に行うことができます。

私の経験では、これが承認を行う最良の方法であり、アプリケーションで特定のアクションを承認する方法と同様の方法です。

要するに、2 回目のデータベース ヒットについてはまったく心配しません。

于 2010-05-14T02:56:59.443 に答える