2013-06-13 4 views
1

Я пытаюсь добавить OutputCache в действие MVC, у которого есть ответ WebImage.Write(), но как только я его добавлю (даже с длительностью 0) тип содержимого изменяется с изображения/jpeg на text/html, и я получаю изображение, выведенное как текст в браузере.MVC WebImage OutputCache приводит к типу содержимого text/html

пример кода - это работает правильно, если атрибут OutputCache удаляется:

[OutputCache(Duration = 3000)] 
public void GetImage(Guid id) 
{ 
    //Create WebImage from byte[] stored in DB 
    DbImage image = DbImageDAL.SelectSingle(e => e.DbImageId == id); 
    WebImage webimage = new WebImage(image.Data); 

    webImage.Write(); 
    //Tried webImage.Write("JPEG"); but it makes not difference 
} 

ответ

4

OutputCache перекрывает ContentType. Вы можете исправить это, выведя класс из OutputCacheAttribute следующим образом:

public class ImageOutputCache : OutputCacheAttribute 
{ 
    public override void OnResultExecuting(ResultExecutingContext filterContext) 
    { 
     base.OnResultExecuting(filterContext); 
     filterContext.HttpContext.Response.ContentType = "image/jpeg"; 
    } 
} 
+0

Спасибо @Pete, что идеально! – Rob

+0

Для более общей версии вы можете сохранить текущее значение ContentType перед вызовом base.OnResultExecuting, а затем установить его в конце. – Mog0