画像アセットを返すだけのコントローラーを作成できますか?
次のような 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ミリ秒
注: これはリクエストの平均時間です。平均はローカル マシンで何千ものリクエストを実行して計算されたため、合計にはネットワークの遅延や帯域幅の問題は含まれません。