2009-07-20 20 views
6

認証HttpModuleに問題があります。問題は、明らかに私がWebサーバー(IIS7)で取得したすべての要求に対して実行されることです。 Session変数も使用するため、CSS、JSファイルなどで正しく動作しません。IIS7で静的コンテンツを実行するHttpModuleを除外する

私が使用してみました:

<add name="AuthModuleName" type="..." preCondition="managedHandler" /> 

が、無駄に。拡張子やMIMEタイプに関係なく、要求ごとに実行されます。追加する必要があります。設定があります。

<modules runAllManagedModulesForAllRequests="true"> 

私には疑わしいと思われ、実際にモジュール上の事前条件が無効になっています。しかし、それをfalseに変更すると、アプリケーションは全く異なる方法で、異なる例外が発生します(SessionStateTempDataProviderではSessionStateを有効にする必要があります)。

静的なコンテンツファイルが要求されたときにIIS7でHttpModuleを除外する方法を教えてもらえますか?

+0

ところで、これはASP.NET開発サーバーではなく、IIS7であると確信しています。ちょうどダブルチェック。 –

+0

私は100%確信しています... –

答えて

3

runAllManagedModulesForAllRequests属性が実際にどのモジュールにあなたが望むように設定するには、偽に設定する必要があります。必要に応じてSessionや他のものも正しく再構成する必要がありますが、主なものは要求を処理するハンドラのパイプライン実行命令です。

答えはone of my other questionsで提供されました:正しく働いていた答えを提供ピーターへ

感謝を。

1

IIS7の設定についてはわかりませんが、これを行うことができます。

セッションオブジェクトは、唯一の非静的コンテンツ用に利用できるようになります:

void yourEventHandler(object sender, EventArgs e) { 
    HttpApplication app = (HttpApplication)sender; 
    if (app.Context.Session == null) { 
     return; 
    } 
    // then your code here... 
} 

これがします、あなたのコードは、CSSなどのファイルに対して実行されることはありません確実JSなどしかし、心の中でセッションオブジェクトを保持しますPostAcquireRequestStateイベントの前にも準備ができていません。 (HttpApplicationイベントの順序については、this pageを参照してください。)

編集:(私はあなたがあなたの質問にIIS7を言った知っているが)。また、それはASP.NET開発サーバーが表示され、あなたのHttpModuleをもまだのために実行されます静的ファイル。

+0

はい私はPostAcquireRequestStateでセッションのものを処理しています...しかし、私はまだ私のモジュールを完全に除外することが可能だと思います...私はそれを "runAllManagedModulesForAllRequests = false" 。これは、私のモジュールがあらゆる要求に対して実行されるように設定するためです。 –

+0

このアプローチは、セッションを使用しないページでは機能しません。 – ygormutti

関連する問題