HttpResponse.BufferOutput = false を設定し、データを応答ストリームに書き込むカスタム ActionResult があります。アクションの結果が ASP.NET MVC のタスクベースの非同期アクション メソッドから得られる場合、応答ストリーム ブロックへの書き込みに気付きました。これは、web.config で Glimpse プラグインが有効になっている場合にのみ発生します。Glimpse は私にとって非常に便利です。少なくとも開発とテスト中は有効にしたいと思っています。コンテンツの長さが非常に大きくなる可能性があり、メモリにバッファリングしたくないため、BufferOutput プロパティは false のままにする必要があります。
これは、この正確な動作を再現できる最短のコードです。
public sealed class CustomResult : ActionResult
{
public override void ExecuteResult(ControllerContext context)
{
var resp = context.HttpContext.Response;
resp.BufferOutput = false;
resp.ContentType = "text/plain";
resp.Output.Write(DateTime.UtcNow.ToString());
resp.Flush();
}
}
public sealed class DownloadController : Controller
{
// the client nevers gets the response from this action
public async Task<ActionResult> Async()
{
await Task.Yield();
return new CustomResult();
}
// this works
public ActionResult Sync()
{
return new CustomResult();
}
}
これを最新の Glimpse.Mvc4 パッケージ (バージョン 1.3.2) でテストしました。
この問題の回避策はありますか、それとも Glimpse のバグなので報告する必要がありますか?