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; }
}
}
この応答は次のようになります。
WFetch で生データをみると次のようになります。
余計なデータ (ボディ) は一切なしで、まさにコード内に記載した文字列のみが送られていることがわかります。
ASPX の場合は HTML テンプレートとなる ASPX ページに、データをはめ込んで最終的な HTML ページが完成していましたが、 ここではそうしたテンプレートはなく、送信したいデータをコードから送り、それで終わりです。
このように単純な応答にはオーバーヘッドの少ない HTTP ハンドラが向いています。
HTTP ハンドラとは
HTTP ハンドラは、上の例でみたように特定の HTTP リクエストに対する応答を行うためのクラスです。
IHttpHandler クラスを実装して、それを *.ashx という拡張子にすれば OK です。