ASP.NET で HTTP ハンドラーを作成する

以前に投稿した静的コンテンツへの要求を動的に処理するという記事に関連して、
今回は HTTP ハンドラーを作成する方法を紹介します。

ASP.NET で HTTP 要求に対して応答を返す方法としては、
IHttpHandler インターフェイスを実装したクラスを作成する方法があり、
.aspx や MVC を使うよりも原始的です (最も原始的な方法は Global.asax)。
ProcessRequest メソッドの引数で HttpContext オブジェクトが渡されます。
HTTP 要求の情報はここからすべて取得でき、応答もこのオブジェクトに格納します。
これにより、任意の処理を実装できます。

IHttpHandler インターフェイスを利用する方法として、
.ashx ファイルを作成する方法もありますが、これでは拡張子が .ashx に固定されてしまいます。
任意の拡張子を利用するには、通常のクラスとして IHttpHandler インターフェイスを実装し、
Web.config で拡張子や HTTP メソッド (GET など) とのマッピングを指定します。

以下では、.txt へのアクセスに対する HTTP ハンドラーを実装します。

using System;
using System.IO;
using System.Web;
public class TextHandler : IHttpHandler
{
public bool IsReusable
{
get { return true; }
}
public void ProcessRequest(HttpContext context)
{
var fileName = Path.GetFileNameWithoutExtension(context.Request.Path);
var text = string.Format("The file name is {0}.", fileName);
context.Response.ContentType = "text/plain";
context.Response.Write(text);
}
}
view raw TextHandler.cs hosted with ❤ by GitHub
<?xml version="1.0"?>
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.5" />
</system.web>
<system.webServer>
<handlers>
<add name="TextHandler" verb="GET" path="*.txt" type="TextHandler"/>
<add name="PngHandler" verb="GET" path="Colors/*.png" type="PngHandler"/>
</handlers>
</system.webServer>
</configuration>
view raw Web.config hosted with ❤ by GitHub

サンプルの全体は HttpHandlerWeb (GitHub) にあります。
なお、このサンプルでは Web アプリケーション プロジェクトではなく、Web サイトを利用しています。
そのため、App_Code フォルダーの下にクラスを配置しています。

これで、.txt へのアクセスを受け付けられるようになりました。

file1.txt

 

以前のバージョン (IIS 6.0 以前?) では、Web.config の system.web/httpHandlers セクションで設定していました。

<?xml version="1.0"?>
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.5" />
<httpHandlers>
<add verb="GET" path="*.txt" type="TextHandler" />
<add verb="GET" path="Colors/*.png" type="PngHandler" />
</httpHandlers>
</system.web>
</configuration>
view raw Web.config hosted with ❤ by GitHub

 

前回:静的コンテンツへの要求を動的に処理する

作成したサンプル
HttpHandlerWeb (GitHub)

バージョン情報
.NET Framework 4.5

参照
チュートリアル : 同期 HTTP ハンドラーの作成 (MSDN)

カテゴリー: .NET Framework. タグ: . 1 Comment »

1件のフィードバック to “ASP.NET で HTTP ハンドラーを作成する”

  1. 静的コンテンツへの要求を動的に処理する | Do Design Space Says:

    […] 前回:静的コンテンツにも SSL を強制する 次回:ASP.NET で HTTP ハンドラーを作成する […]


コメントを残す