在没有CHUNKED响应的情况下手动编写流

时间:2012-10-12 06:25:32

标签: asp.net asp.net-mvc-3 google-chrome

我正在尝试手动编写我的响应流并关闭它,这样我可以在响应关闭后继续做一些事情。我通过以下方式成功实现了这一目标:

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

这在大多数情况下都很完美,但是对于Chrome / Flash,闪存中存在一个错误,因为它会导致这是一个IO错误。在分析标题时,手动发送带有Return Json(结果)的响应与我上面的操作方式之间的区别在于,当我正常返回数据时,它会使用以下标题:

Content-Length: 44

当我发送上面的代码时,我得到:

Transfer-Encoding: chunked

是否有可能做我想要的但没有数据块?我知道这不是特定于ASP.net的,而是针对chrome的flash中的一个bug,但我想解决这个问题。

1 个答案:

答案 0 :(得分: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 });