ASP.NET MVC コントローラーはイメージを返すことができますか? 質問する

ASP.NET MVC コントローラーはイメージを返すことができますか? 質問する

画像アセットを返すだけのコントローラーを作成できますか?

次のような URL が要求されるたびに、このロジックをコントローラー経由でルーティングしたいと思います。

www.mywebsite.com/resource/image/topbanner

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

ビューを作成する必要がある例を見たことがありますが、ビューは使いたくありません。コントローラーだけですべてを実行したいのです。

これは可能ですか?

ベストアンサー1

ベース コントローラーの 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:写真1枚あたり7.6ミリ秒
  • 直接撮影: 1枚あたり6.7ミリ秒

注: これはリクエストの平均時間です。平均はローカル マシンで何千ものリクエストを実行して計算されたため、合計にはネットワークの遅延や帯域幅の問題は含まれません。

おすすめ記事