このクラスを使用してRangeFilePathResult
、MVCコントローラーからmp3ファイルを提供しています。
アクションは次のように定義されます。
[CacheFilter]
[OutputCache(CacheProfile = "Mp3Cache")]
public RangeFilePathResult Mp3Completed(string f)
{
FileInfo info = new FileInfo(string.Format("C:\\test\\{0}.mp3", f));
return new RangeFilePathResult("audio/mpeg", info.FullName, info.LastWriteTimeUtc, info.Length);
}
そして、キャッシュポリシーは次のとおりです。
<caching>
<outputCacheSettings>
<outputCacheProfiles>
<add name="Mp3Cache" duration="3600" varyByParam="f" location="Any" />
</outputCacheProfiles>
</outputCacheSettings>
</caching>
なぜこれがそのまま正しく機能するのですか?varyByHeader
範囲リクエストが出力キャッシングで機能することを保証するには、明示的にする必要があるようです。私が取り組んでいた問題は、iOS上のjPlayerがMP3ファイルの期間を表示できず、従来のFilePathResultを使用するとNaNをレンダリングすることでした。これは、この実装で機能します。