統合パイプラインを使い、.htm や .png まで asp.net フォーム認証の対象にする

 

IIS.net Learn IIS7 How to Take Advantage of the IIS 7.0 Integrated Pipeline Building and Running

を試します。

 

 

クラシック モード

まずはクラシック モードのプールで動かします。

(1) ~/Default.aspx を要求すると、login.aspx に飛ばされます。

 

(2) ~/iisstart.htm を要求すると、login.aspx に飛ばされません。

 

 

 

 

統合モード

クラシックではなく統合モードのプールを使うよう設定を変えます。

(3) ~/iisstart.htm を要求すると login.aspx に飛ばされます。

(4) ~/welcom.png を要求しても login.aspx に飛ばされます。

 

たしか、IIS 6.0 で (3) (4) を実現するには、aspnet_isapi.dll ISAPI 拡張をワイルド カード アプリケーション マップするんですよね・・・今は手元に IIS 6.0 が無いので試しません。

 

 

おまけ

配置後、Providers アイコンをダブルクリックすると一覧に AspNetReadOnlyXmlMembershipProvider があります。

.NET Users アイコンをダブルクリックするとエラーが出ます。プロバイダは GAC に入れないとダメということ?

ASP.NET HTTP モジュール

Visual C# .NET を使用して ASP.NET HTTP モジュールを作成する方法

を試します。

 

普通に動かすと 500 番のエラーになります。

サーバー上の IE ブラウザで見ると、詳細が出てます。

HTTP Error 500.22 – Internal Server Error

An ASP.NET setting has been detected that does not apply in Integrated managed pipeline mode.

 

 

(対処方法 1)

web.config を書き換えます。

———————————————– 書き換え前

<configuration>
   <system.web>
      <httpModules>
         <add name="MyModule" type="MyModule.SyncModule, MyModule" />
      </httpModules>
   </system.web>
</configuration>

 

———————————————– 書き換え後

<configuration>
    <system.webServer>
        <modules>
            <add name="MyModule" type="MyModule.SyncModule, MyModule" preCondition="managedHandler" />
        </modules>
    </system.webServer>
</configuration>

 

(対処方法 2)

web.config を書き換えるのが面倒なら、統合モードではなく、クラシック モードにします。

_i は統合モード用のプールで、_c がクラシック モード用のプールです。

 

参考

方法  IIS 7.0 の system.webServer セクションを構成する

マジメに探せばもっと色々と情報が転がってるはず・・・(探すの面倒だ)