HTTP ハンドラの基本 - ジェネリック HTTP ハンドラとは?

いわゆる REST によるサービスを ASP.NET で実装しようと思ったらどうしたら良いでしょうか。

念のため簡単に説明すると、 REST というのは通常 HTTP の GET リクエストに対して、 XML による応答を行うようなサービスを指します。

各種サーバーコントロール等を貼り付けた ASPX ページは、 HTML をコンテンツとすることを前提として設計されています。 このため単なる XML メッセージを返す、とか、 JSON 文字列を返すといった単純作業をむしろ不得意としています。

HTTP ハンドラというのは、特に HTML ページを HTTP のコンテンツとしないような場合に向いています。

最初に HTTP ハンドラの簡単な例

先に HTTP ハンドラの実行例を見てください。

次のページを MyHandler1.ashx として保存して、HTTP クライアントから要求してください。

<%@ WebHandler Language="C#" Class="MyHandler1" %>

using System;
using System.Web;

public class MyHandler1 : IHttpHandler {

	public void ProcessRequest(HttpContext ctx) {
		ctx.Response.ContentType = "text/plain";
		ctx.Response.Write("Hello, HTTP Handler!");
	}
	
	public bool IsReusable {
		get { return true; }
	}

}

この応答は次のようになります。

HTTP ハンドラ

WFetch で生データをみると次のようになります。

HTTP ハンドラ

余計なデータ (ボディ) は一切なしで、まさにコード内に記載した文字列のみが送られていることがわかります。

ASPX の場合は HTML テンプレートとなる ASPX ページに、データをはめ込んで最終的な HTML ページが完成していましたが、 ここではそうしたテンプレートはなく、送信したいデータをコードから送り、それで終わりです。

このように単純な応答にはオーバーヘッドの少ない HTTP ハンドラが向いています。

HTTP ハンドラとは

HTTP ハンドラは、上の例でみたように特定の HTTP リクエストに対する応答を行うためのクラスです。

IHttpHandler クラスを実装して、それを *.ashx という拡張子にすれば OK です。

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 ASP.NET 入門