2014-12-22 2 views
2

У меня есть ASP.NET MVC контроллер действия, как следующее:DonutOutputCache не работает для изображения

[HttpGet] 
[DonutOutputCache(CacheProfile = "banner")] 
public async Task<ActionResult> Banner(string name, string size = "lg") 
{ 
    // snipped - work out which banner to show today. 

    return File(thePathToSomeBannerImageFile, "image/jpeg"); 
} 

И конфигурационный файл выглядит следующим образом:

<caching> 
    <outputCacheSettings> 
    <outputCacheProfiles> 
     ... 
     <add name="banner" duration="31536000" varyByParam="*" /> 
     ... 
    </outputCacheProfiles> 
    </outputCacheSettings> 
</caching> 

С добавлением DonutOutputCache образом, который я используемый для рендеринга в мой браузер, теперь не будет загружаться. Я вижу в трассе Fiddler, что в браузер попадает довольно большой двоичный файл, но я не могу заставить его визуализировать.

Снятие DonutOutputCache заставляет изображение появляться снова.

Я пробовал очистить кеш и т. Д. Любые идеи?

ответ

2

Ах, только что понял, по этой ссылке: Doesn't work w/ Files?.

В основном DonutOutputCache использует ContentResult внутренне, который работает только с текстовым контентом. Поскольку я возвращаю двоичный ответ в FileResult, он беспорядок заполняет. К счастью, он работает бок о бок со встроенным OutputCache, поэтому я могу изменить свое действие следующим образом, и оно работает так, как ожидалось. Мне действительно нужны только DonutOutputCache для других битов моего сайта, которые основаны на тексте. Я споткнулся, пытаясь просто иметь один атрибут кеширования, чтобы управлять ими всеми.

[HttpGet] 
[OutputCache(CacheProfile = "banner")] 
public async Task<ActionResult> Banner(string name, string size = "lg") 
{ 

}