7

アプリケーションに送信されるリクエストごとに、いくつかのもの (Cookie) をチェックする必要があります。

ASP.NET では、このタスクに HttpModule を使用しましたが、MVC では何を使用する必要があるのでしょうか? 一部の Global Filter 、または HttpModuler も使用できますが、MVC と通常の ASP.NET の間で Request PipeLine に違いはありますか?

4

3 に答える 3

12

MVC は ASP.NET の抽象化であるため、"フック" は、ロジックを挿入するレベルによって異なります。アクション フィルターを使用すると、MVC 固有のイベントにフックできます。

  • OnActionExecuting– このメソッドは、コントローラー アクションが実行される前に呼び出されます。
  • OnActionExecuted– このメソッドは、コントローラー アクションが実行された後に呼び出されます。
  • OnResultExecuting– このメソッドは、コントローラー アクションの結果が実行される前に呼び出されます。
  • OnResultExecuted– このメソッドは、コントローラー アクションの結果が実行された後に呼び出されます。

一方、HttpModule では、ASP.NET (MVC が構築されている) 固有のイベントにフックすることしかできません。

  • BeginRequest- リクエストが開始されました。リクエストの開始時に何かを行う必要がある場合 (たとえば、各ページの上部に広告バナーを表示するなど)、このイベントを同期します。
  • AuthenticateRequest- 独自のカスタム認証方式をプラグインする場合 (たとえば、パスワードを検証するためにデータベースに対してユーザーを検索する)、このイベントを同期し、必要な方法でユーザーを認証するモジュールを構築します。
  • AuthorizeRequest- このイベントは、承認メカニズムを実装するために内部的に使用されます (たとえば、アクセス制御リスト (ACL) をファイル システムではなくデータベースに格納するため)。このイベントはオーバーライドできますが、そうする正当な理由はあまりありません。
  • PreRequestHandlerExecute- このイベントは、HTTP ハンドラーが実行される前に発生します。
  • PostRequestHandlerExecute- このイベントは、HTTP ハンドラーが実行された後に発生します。
  • EndRequest- リクエストが完了しました。リクエスト全体を通して情報を収集し、その情報をページに書き込むデバッグ モジュールを作成することができます。

そのため、いつイベントをフックする必要があるか、どのイベントが必要かによって異なります。

于 2012-11-25T11:24:36.950 に答える
4

HttpModule が以前にうまく機能していた場合は、Mvc で引き続き使用できます。

あなたの質問の他の部分は範囲が非常に広く、 asp.net-mvc パイプラインと拡張性に関する優れた記事を読んでいると思います。

于 2012-11-25T11:20:55.597 に答える
2

グローバルアクションフィルターを使用して同様のことを行いました。それは非常にうまく機能し、コードをアプリケーション内に統合し続けます。

もちろん、HTTPモジュールも同様に機能しますが、これは、メインアプリケーションからコードを分離し、それを個別に維持することを意味します。コードが複数のサイトにまたがっている、複数のアプリケーションで使用されている、またはWebフォームサイトで動作する必要がある場合を除いて、グローバルフィルターを使用します。

于 2012-11-25T11:31:32.587 に答える