Sitecoreクライアントインターフェイスのいずれかで動作しているときにCassetteからの空の応答ストリームは、CassetteがrewriteHtml
実装する機能が原因で発生しています。
デフォルトでは、CassetteはページのHTML出力をバッファリングして再書き込みします。これにより、タグがレンダリングされた後、部分ビューで<link>
スタイルシートを参照するタグを挿入できます。書き換え機能は、イベントハンドラー<head>
として呼び出されます。PostRequestHandlerExecute
表示されている空の応答ストリームは、再書き込みされた出力ストリームがフラッシュされていない結果です。この問題の修正は、Cassette.AspNet.PlaceholderReplacingResponseFilter
クラスでCloseが呼び出されたときに出力ストリームをフラッシュすることです。これを以下に示します。
void WriteUncompressedOutput()
{
var output = GetOutputWithPlaceholdersReplaced(bufferStream);
var outputBytes = outputEncoding.GetBytes(output);
if (outputBytes.Length > 0)
{
outputStream.Write(outputBytes, 0, outputBytes.Length);
outputStream.Flush();
}
}
書き換え機能が必要ない場合は、回避策を利用できます。web.config
:のいずれかで、CassetteHTML書き換え機能を無効にするだけです。
<configuration>
<configSections>
....
<section name="cassette" type="Cassette.CassetteConfigurationSection, Cassette"/>
</configSections>
<cassette rewriteHtml="false"/>
またはコードで:
public class CassetteSettingsConfiguration : IConfiguration<CassetteSettings>
{
public void Configure(CassetteSettings configurable)
{
configurable.IsHtmlRewritingEnabled = false;
}
}
この情報は、SitecoreでのCassetteの使用に関する私のブログ投稿に含まれています。