Если изображение не такое уж большое и есть большая вероятность, что вы будете часто использовать его повторно, и если их у вас не слишком много, и если изображения не являются секретными (то есть сделка, если один пользователь потенциально может увидеть изображение другого человека) ...
Здесь много "если", так что есть большая вероятность, что это плохая идея:
Вы можете хранить байты изображения в Cache
течение короткого времени и сделать тег изображения направленным на метод действия, который, в свою очередь, читает из кеша и выплевывает ваше изображение. Это позволит браузеру соответствующим образом кэшировать изображение.
// In your original controller action
HttpContext.Cache.Add("image-" + model.Id, model.ImageBytes, null,
Cache.NoAbsoluteExpiration, TimeSpan.FromMinutes(1),
CacheItemPriority.Normal, null);
// In your view:
<img src="@Url.Action("GetImage", "MyControllerName", new{fooId = Model.Id})">
// In your controller:
[OutputCache(VaryByParam = "fooId", Duration = 60)]
public ActionResult GetImage(int fooId) {
// Make sure you check for null as appropriate, re-pull from DB, etc.
return File((byte[])HttpContext.Cache["image-" + fooId], "image/gif");
}
Это дает дополнительное преимущество (или это костыль?) Работы в старых браузерах, где встроенные изображения не работают в IE7 (или IE8, если размер превышает 32 КБ).