1. ホーム
  2. asp.net

[解決済み] ASP.NET Web APIを使用して画像を返す推奨される方法はありますか?

2023-04-28 21:45:05

質問

2つのパラメータ(リサイズ用のxとy)を持つ画像を返すのに最適な方法は何でしょうか?

例えば

~/api/image12345/200/200

200 x 200 の jpg/png/or gif を返します。

を返すべきでしょうか。 System.Drawing.Image オブジェクトを返すか、手動で HTTPReponseMessage.Content ?

どのように解決するのですか?

を返してはいけません。 System.Drawing.Image を返すべきでなく、それを適切なバイトに変換する方法を知っているフォーマッタを追加しない限り、あなたが期待するような画像バイトとして自分自身をシリアライズすることはありません。

一つの可能な解決策は HttpResponseMessage をそのコンテンツに格納することです (下図参照)。質問で示したURLが必要な場合、{imageName}、{width}、{height}パラメータをマッピングするルートが必要であることを忘れないでください。

public HttpResponseMessage Get(string imageName, int width, int height)
{
    Image img = GetImage(imageName, width, height);
    using(MemoryStream ms = new MemoryStream())
    {
        img.Save(ms, System.Drawing.Imaging.ImageFormat.Png);

        HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);
        result.Content = new ByteArrayContent(ms.ToArray());
        result.Content.Headers.ContentType = new MediaTypeHeaderValue("image/png");

        return result;
    }
}

しかし、多くの場所でこれを行うのであれば、フォーマッタのルートを通ることが推奨される方法かもしれません。プログラミングにおけるほとんどすべてのことと同様に、答えはあなたのシナリオに依存します。