1. ホーム
  2. asp.net

[解決済み] ASP.NET MVCコントローラは、Imageを返すことができますか?

2022-03-20 20:45:29

質問

画像アセットを返すだけのControllerは作れますか?

以下のようなURLがリクエストされるたびに、このロジックをコントローラにルーティングしたいのですが。

www.mywebsite.com/resource/image/topbanner

コントローラが検索するのは topbanner.png で、その画像を直接クライアントに送り返す。

このような例では、Viewを作成しなければなりませんが、私はViewを使いたくありません。私はViewを使いたくありません。Controllerだけですべてを行いたいのです。

これは可能ですか?

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

ベースコントローラのFileメソッドを使用します。

public ActionResult Image(string id)
{
    var dir = Server.MapPath("/Images");
    var path = Path.Combine(dir, id + ".jpg"); //validate the path for security or use other means to generate the path.
    return base.File(path, "image/jpeg");
}

注意点として、これはかなり効率的なようです。コントローラから画像を要求するテストをしてみました ( http://localhost/MyController/Image/MyImage ) と、直接の URL ( http://localhost/Images/MyImage.jpg )となり、その結果は

  • MVCです。 7.6ミリ秒/写真
  • ダイレクトに 6.7ミリ秒/写真

注:これは1回のリクエストの平均時間です。平均値はローカルマシン上で何千ものリクエストを行うことで算出されたため、合計値にはネットワークの遅延や帯域幅の問題は含まれていないはずです。