システム開発ブログ/ 流通システム部 Yahoo!ブックマークに登録 Google ブックマーク はてなブックマーク Livedoorクリップ シェア

システム開発ブログ

Twitterでilovex_officialをフォローしてください

最近の記事

カテゴリー

部署

月別アーカイブ

以前の部署別ブログ

【.NET】ASP.NETで拡張子のマッピングを行う

小佐野
小佐野 (2010年7月13日 10:05)
流通システム部 / .NET
みなさん、こんにちは。

今回はASP.NETで拡張子のマッピングを行う方法を紹介します。
Javaでいうところのサーブレットマッピングを、ASP.NETで実現するための方法です。
ASP.NETで拡張子のマッピングを行うには、IISとWebアプリケーションの両方で設定が必要になります。
今回はサンプルとして「.xls」の拡張子に対してマッピングを行いたいと思います。

まずはWebアプリケーションを作成し、仮想ディレクトリの設定を行います。
[管理ツール]→[インターネットインフォメーションサービス]で仮想ディレクトリのプロパティを表示します。
[仮想ディレクトリ]→[構成]→[マッピング]→[追加]でマッピングしたい拡張子を追加します。

それぞれの設定は以下のようにします。
[実行ファイル]→aspx等の拡張子に設定されている「aspnet_isapi.dll」のパスを設定します。
[拡張子]→.xls
[動詞]→制限:GET,HEAD,POST,DEBUG
[スクリプトエンジン]→チェックあり
[ファイルの存在を確認する]→チェックなし

以上のように設定することで、ASP.NETのアプリケーションで「.xls」の拡張子が処理されるようになります。

次は実際にリクエストを処理するクラスを作成します。
.NETFramework2.0の場合、aspxなどのプログラム以外のファイルは「System.Web.DefaultHttpHandler」クラスによって処理されるので、
今回のサンプルでは上記のクラスを継承したサブクラスを作成します。
※.NETFramework1.1の場合は「System.Web.StaticFileHandler」クラスによって処理されます。

以下はサンプルのクラスです。
Public Class MappingSampleClass
    Inherits System.Web.DefaultHttpHandler

    ''' 
    ''' BeginProcessRequestをオーバーライドします。
    ''' 
    Public Overrides Function BeginProcessRequest( _
        ByVal context As System.Web.HttpContext, _
        ByVal callback As System.AsyncCallback, _
        ByVal state As Object) As System.IAsyncResult

        Dim sUrl As String = context.Request.RawUrl
        'ファイル名に「restrict」という文字列が含まれる場合はアクセス禁止とする。
        If sUrl.Contains("restrict") Then
            Throw New Exception("アクセス禁止!!")
        End If
        Return MyBase.BeginProcessRequest(context, callback, state)
    End Function
End Class
最後はWeb.configの設定を行い、拡張子とクラスのマッピングを行います。
Web.configのsystem.webセクションに以下を追加します。

    

「type」には「完全クラス名, アセンブリ名」を指定します。
詳しくは以下を参照して下さい。
http://msdn.microsoft.com/ja-jp/library/cc433424(v=VS.71).aspx

以上で「.xls」の拡張子がMappingSampleClassクラスで処理されるようになります。
以下は動作確認のためのaspxのサンプルです。
<%@ Page Language="vb" AutoEventWireup="false"
CodeBehind="Default.aspx.vb" Inherits="MappingSample._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">



    <title></title>
</head>
<body>
    
</body> </html>
アプリケーションのルートに「Book1.xls」「restrict1.xls」の2つのxlsファイルを配置して実行すると、
「restrict1.xls」を押下した場合にはファイルのダウンロードが行われずに、エラーページに遷移します。
今回のサンプルはxlsですが、xlsのみならず静的なファイルに対して、
アプリケーション独自のアクセス制限をかけたい場合に有効かもしれませんね。

ちなみにですが、VisualStudio2005以降に付属の開発サーバを使用した場合には、IISの設定は必要なくWeb.configの設定のみで動作します。


「システム開発ブログ」へのコメントやご意見等ありましたら、 ファンページまでお願いします。  Facebook のファンページ

お問い合せ・情報はこちらの電話番号におかけください:03-3232-2525 お問合せ・資料請求はこちらをクリックしてください
ページのトップ
システム開発・一括受託開発。見積依頼受付中

システム開発専用サイト

システム開発の流れ・手順、実績など。アイロベックスのシステム開発を紹介。

VB .NETを主言語としたWebアプリケーションの開発

要件分析から保守まで、お客様の現場での問題解決だけでなく、IT経営の援護者としてトータルソリューションサービスを提供しています。

MovableType を使ったウェブサイト構築

魅力あるウェブサイトデザイン、構成はもとよりMovableTypeを使用したウェブサイトの作成、JAVA、CGIによる注文フォームの作成等、ビジネスを強力にサポートします。

フォルダーアクセス権限確認ツール『AD-Folder』

Windowsフォルダーアクセス権限確認ツール

フォルダーアクセス権限を一目で確認。使用版を無償でご利用いただけます。

スクール運営を応援する講座情報管理システム『CMS+AD for School』

Webとリアルをつなぐコンテンツマネージメントシステム

Webサイト・モバイルサイト・チラシ(PDF)・カタログ(InDesign)を、簡単かつ正確に作成できます。

「システム開発ブログ」の更新情報をTwitterで。

Twitter公式アカウントに認定されています

「システム開発ブログ」の更新情報をTwitterで。ぜひ、フォローをお願いします。