2014-12-22 1 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를 추가 이후 그 I 내 브라우저에 렌더링하는 데 사용되는 브라우저가로드되지 않습니다. 피들러 추적에서 largish 바이너리 파일이 브라우저에 표시되는 것을 볼 수는 있지만 렌더링 할 수는 없습니다.

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") 
{ 

}