.NET TIPS

[ASP.NET].htmlや.pdfファイルをフォーム認証やロギングの対象にするには?

山田 祥寛
2004/01/30

 フォーム認証やGlobal.asax、HTTPハンドラによるロギング機構は、アプリケーション(またはサイト)共通の仕組みを簡単に構築するのに大変有効な手段だ。しかし、これらには実は「致命的」といってもよい欠陥がある。

 というのも、ASP.NETが解釈しないファイル、例えば「.html」や「.txt」「.pdf」などの拡張子のファイルについては、該当のフォルダ配下にあっても、認証やロギングの対象とはならないのだ。そのため、これらのファイルでも認証やロギングを有効にするために、あえて「.html」や「.txt」のようなファイルをすべて「.aspx」で統一してきた諸氏も多かったかもしれない。しかし、イントラネット環境などで、アプリケーション配下のコンテンツを各ユーザーに更新させているような環境では、必ずしもそのようなルールを徹底させることができない場合も多い。また、そもそも「.pdf」や「.jpg」のような拡張子それ自体によってブラウザの挙動が決まっているようなファイル(バイナリ・ファイル)については、安易に拡張子を変更することもできないだろう。Windows認証を利用すれば、(認証については)一応解決することができるが、このために認証の方法が左右されるのでは、いかにも本末転倒である。

 そこで本稿では、IISの設定によって「.html」や「.pdf」など任意の拡張子をASP.NETに認識させる方法を紹介する。もっとも、「認識させる」といっても、何ら特別な手順を要するわけではない。要は該当の拡張子とASP.NETエンジン(aspnet_isapi.dll)の関連付けを行えばよいだけだ。

(1)[<仮想ディレクトリ名>のプロパティ]を開く

 [コントロール パネル]の[管理ツール]の中にある[インターネット インフォメーション サービス]を実行する。実行されたプログラムの中の[Webサイト]のツリーで対象となるアプリケーションの仮想ディレクトリを右クリックし、そこで表示されるコンテキスト・メニューから[プロパティ]を実行する。これにより[プロパティ]ダイアログが表示されるので、そのダイアログの[仮想ディレクトリ]タブから[構成]ボタンをクリックする。

[<仮想ディレクトリ名>のプロパティ]ダイアログ
[インターネット インフォメーション サービス]の[Webサイト]のツリーにある「仮想ディレクトリ」を右クリックし、そこで表示されるコンテキスト・メニューから[プロパティ]を実行して、表示されるダイアログ。サイト単位で拡張子の関連付けを行いたい場合には、[インターネット インフォメーション サービス]の[Webサイト]のツリーにある[既定のWebサイト]を右クリックしてコンテキスト・メニューを表示し、その中から[プロパティ]を実行して[既定Webサイトのプロパティ]ダイアログを開けばよい。このダイアログで[ホーム・ディレクトリ]タブを選択すれば、上記と同様の画面が表示される。後続の手順はまったく同様である。
  [仮想ディレクトリ]タブを開く。
  [構成]ボタンをクリック。

(2)拡張子のマッピングを追加する

 [アプリケーションの構成]ダイアログが開くので、[追加]ボタンをクリックし、[アプリケーションの拡張子マッピングの追加/編集]ダイアログを開いてみよう。

[アプリケーションの構成]ダイアログ
拡張子のマッピング(関連づけ)を追加する。
  [アプリケーションのマッピング]タブを開く。
  [追加]ボタンをクリック。すると、[アプリケーションの拡張子マッピングの追加/編集]ダイアログが開く。

 以下では、仮に「.html」をASP.NETエンジンに関連付けしてみる。もしもほかの拡張子をマッピングしたい場合には、「.html」の部分を該当の拡張子に読み替えてほしい。

[アプリケーションの拡張子マッピングの追加/編集]ダイアログ
この例では「.html」をASP.NETエンジンに関連付けようとしている。
 
項目 概要
実行ファイル <Windowsルート>\Microsoft.NET\Framework\<バージョン番号>\aspnet_isapi.dll
拡張子 .html
動詞 [制限]を選択(「GET」のみを許可)
スクリプト エンジン チェックする
ファイルの存在を確認する チェックしない
アプリケーションの拡張子マッピングの追加
この設定内容で「.html」をASP.NETエンジンに関連付けを行ってみる。

 実行アクセス権が未設定のフォルダで、ASP.NETがファイルを処理するためには[スクリプト エンジン]の項目を有効に設定する必要がある。拡張子にかかわらず、ASP.NETエンジンへの関連付けを行う場合には、この項目は固定であると考えておけばよいだろう。

 [ファイルの存在を確認する]を有効にした場合、実行に先だって、指定されたファイル(URL)がサーバ上に実在するかどうかがIISによってチェックされる。ファイルが存在しないか、ユーザーがファイルに対してアクセス権を持っていない場合には、IISが自らエラー・レスポンスを返してくれるというわけだ。ただし、Perlインタプリタのような一部の例外を除いては、スクリプト・エンジンが存在チェックを行うため、ほとんどの場合でこの項目を有効にする必要はない。例えば、ASP.NETで本項目をチェックした場合、IISとスクリプト・エンジンとの双方で対象ファイルのチェックが行われるため、パフォーマンス低下の原因となる場合がある。

 以上で、拡張子とASP.NETエンジンとのひも付けは完了だ。ほかの拡張子についてもマッピングを行いたい場合には、対象の拡張子部分のみを読み替え、(1)〜(2)の手順を繰り返してほしい。

 動作の確認は、別稿「アプリケーション共通のロギングを行うには?(HTTPモジュール編)」のサンプルで試してみよう。デフォルトの動作では、「.aspx」や「.asmx」などのファイルに対してしかログを記録しなかったはずであるが、今度は「.html」ファイルについてもログが記録されるようになったはずだ。

HTTPハンドラによって記録したログファイル
「.html」ファイルのログも記録されるようになった。

 フォーム認証についても、別稿「TIPS:[ASP.NET]構成ファイルのみでフォーム認証を実現するには? 」のサンプルで、適宜動作を確認してみてほしい。End of Article

カテゴリ:Webフォーム 処理対象:ログ
 
この記事と関連性の高い別の.NET TIPS
[ASP.NET]特定の拡張子に対するアクセスを制限するには?
[ASP.NET]アプリケーションにログ参照のユーティリティを追加するには?
[ASP.NET]アプリケーション共通のロギングを行うには?(Global.asax編)
[ASP.NET]IIS 6.0(Windows Server 2003)でWebアプリケーションが実行できない場合は?
[ASP.NET]構成ファイルのみでフォーム認証を実現するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間