2

次のような 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と、画像が再び表示されます。

キャッシュなどをクリアしてみました。何かアイデアはありますか?

4

1 に答える 1

2

ああ、このリンクからそれを理解したところです:ファイルでは機能しませんか? .

基本的に、テキストベースのコンテンツでのみ機能するContentResultDonutOutputCacheを内部で使用します。私はFileResultでバイナリ応答を返しているので、めちゃくちゃです。幸いなことに、組み込みの と並行して動作するため、次のようにアクションを変更すると、期待どおりに動作します。テキストベースのサイトの他の部分だけが必要でした。すべてを支配するキャッシング属性を 1 つだけ持たせようとしてつまずきました。OutputCacheDonutOutputCache

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

}
于 2014-12-22T10:30:39.703 に答える