0

応答ストリームを手動で書き込んで閉じようとしているので、応答が閉じられた後もいくつかの作業を続行できます。私は次のことを行うことでこれを成功裏に達成します:

Response.StatusCode = 200
Response.ContentType = "application/json; charset=utf-8"
Response.Write(j)
Response.Flush()
Response.Close()
DOWORK()

これはほとんどの場合完璧に機能しますが、Chrome / Flashの場合、フラッシュにバグがあり、IOエラーであると見なされます。ヘッダーを分析する場合、Return Json(results)を使用して手動で応答を送信することと、上記の方法との違いは、通常データを返すときに、次のヘッダーを使用することです。

Content-Length: 44

上記のコードで送信すると、次のようになります。

Transfer-Encoding: chunked

私がやりたいことをすることはできますが、データをチャンク化することはできませんか?これはASP.net固有ではなく、Chromeのフラッシュのバグですが、これを解決したいと思います。

4

1 に答える 1

1

私のコメントに続いて、私は次のようなことを考えていました:

public class CustomResult : JsonResult
{
    private Action afterAction;
    private object obj = null;

    public CustomResult(object obj, Action afterAction) : base()
    {
        this.JsonRequestBehavior = System.Web.Mvc.JsonRequestBehavior.AllowGet;
        this.Data = obj;
        this.afterAction = afterAction;
    }

    public override void ExecuteResult(ControllerContext context)
    {
        base.ExecuteResult(context);
        afterAction();
    }
}

これで、コントローラーアクションで呼び出すことができます。

return new CustomResult(obj, () => { //custom code here, will be executed later });
于 2012-10-12T06:50:45.317 に答える