我正在尝试手动编写我的响应流并关闭它,这样我可以在响应关闭后继续做一些事情。我通过以下方式成功实现了这一目标:
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,但我想解决这个问题。
答案 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 });