この記事ではIHttpHandlerインターフェイスを実装して画像を生成して返す方法を紹介します。
以下2つの手順に従います。
- IHttpHandlerインターフェイスを実装した画像を出力するクラスを実装する
- 1のクラスをweb.configファイルへ登録する
- IHttpHandlerインターフェイスを実装すること
- 画像のバイナリデータをHTTPレスポンスへ出力すること
- Content-Typeヘッダを適切に設定すること
namespace HttpHandlerSample
{
// 動的にPNG画像を生成するクラス
public class PngHandler : IHttpHandler
{
// このオブジェクトが再利用可能かを返すプロパティ
public bool IsReusable
{
get
{
return true;
}
}
// ...略...
// HTTPリクエストを処理するメソッド
public void ProcessRequest(HttpContext context)
{
// 画像を生成する
using (var image = GenerateImage())
{
// PNG形式でHTTPレスポンスへ出力する
var output = context.Response.OutputStream;
image.Save(output, ImageFormat.Png);
output.Flush();
}
// Content-TypeヘッダをPNG形式に設定する
context.Response.ContentType = "image/png";
}
// ...略...
}
}
IHttpHandlerにはIsReusableプロパティとProcessRequestメソッドが定義されています。このProcessRequestメソッドを実装することで機能を実現します。
画像のバイナリデータを出力するには、Image#Saveメソッドを使用します。
Content-Typeヘッダを指定するには、HttpResponse#ContentTypeプロパティを使用します。画像の形式が一致するように設定します。
次に、上のクラスをweb.configへ以下のように設定します。
以上で動的な画像の生成が実現できます。
以下、サンプルコード全体です。
画像のバイナリデータを出力するには、Image#Saveメソッドを使用します。
Content-Typeヘッダを指定するには、HttpResponse#ContentTypeプロパティを使用します。画像の形式が一致するように設定します。
次に、上のクラスをweb.configへ以下のように設定します。
<configuration>
<system.webServer>
<handlers>
<add name="PngHandler" path="*.png" verb="GET" type="HttpHandlerSample.PngHandler"/>
</handlers>
</system.webServer>
</configuration>
ちなみに以上で動的な画像の生成が実現できます。
以下、サンプルコード全体です。