DonutOutputCache不适用于图像

时间:2014-12-22 10:25:20

标签: asp.net-mvc donut-caching

我有一个ASP.NET MVC控制器操作,如下所示:

[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会使图像再次显示。

我已尝试清除缓存等任何想法?

1 个答案:

答案 0 :(得分: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")
{

}