我有一个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
会使图像再次显示。
我已尝试清除缓存等任何想法?
答案 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")
{
}