1

私は一日中ウェブで検索してきましたが、何も見つかりませんでした。私のweb.configでは、次のように設定しました:

<modules runAllManagedModulesForAllRequests="false">

<add name="MyModule" type="namespace.to.MyModule" preCondition="managedHandler" />

これにより、MyModule (この例では PostAuthenticateRequest にフックされている) が画像、css、js などの静的リソースで起動されなくなります。ただし、モジュールはページ内の .axd ファイルによって引き続き起動されます。特に、WebResource.axd から起動されます。

4

1 に答える 1

0

このチェックを HttpModule に追加したところ、機能しました。

            ' Skip the module for non aspx requests like .axd or url without default document
     Private Sub Application_PostAuthenticateRequest(ByVal source As Object, ByVal e As EventArgs)
        Dim request = DirectCast(source, HttpApplication).Request
        If request.CurrentExecutionFilePathExtension.ToLower <> ".aspx" Then
            Exit Sub
        End If

これは PostAuthenticateRequest にフックされます。OnEndRequest などの他のイベントにフックする場合は、HttpApplication ではなく HttpContext にアクセスできることに注意してください。代わりにこれを追加してください。

  Protected Overridable Sub OnEndRequest(context As HttpContext)          
  ' Skip the module for non aspx requests like .axd or url without default document
        Dim request = context.Request
        If request.CurrentExecutionFilePathExtension.ToLower <> ".aspx" Then
            Exit Sub
        End If

また、 http://www.yoursite.comなどのドキュメントなしで URL を呼び出す場合、 IIS はhttp://www.yoursite.com/Default.aspx (または設定した定義ドキュメント)への要求をトリガーすることに注意してください。したがって、ページが空の場合でも、2 つのリクエストがトリガーされます。IIS サイトには、「既定のドキュメント リクエストの場合、最初のリクエストは拡張子のない URL に対するものです。したがって、IIS は、最初のリクエスト処理中に、マネージ ハンドラーの前提条件でマークされたマネージ モジュールを実行しません。」と述べています。しかし、そうではありません。http://www.yoursite.com/のようなリクエストで属性 precondition="managedHandler" でマークされた HttpModule でもそれでも 2 回トリガーされます (1 つは / 用、もう 1 つは /Default.asp 用)。とにかく、上記の回避策を使用すると、これも解決します。

于 2012-12-26T11:27:16.027 に答える