【发布时间】:2021-02-16 15:55:24
【问题描述】:
当流大json对象到浏览器时,防止OutOfMemoryException;在.Net Framework中,我能够使用
public static void StreamJsonThenEnd(this HttpResponseBase httpResponse, object data)
{
httpResponse.ContentType = "application/json";
using (StreamWriter writer = new StreamWriter(httpResponse.OutputStream))
using (JsonTextWriter jsonWriter = new JsonTextWriter(writer))
{
JsonSerializer ser = new JsonSerializer();
ser.Serialize(jsonWriter, data);
jsonWriter.Flush();
}
httpResponse.End();
}
但是当我在 .Net Core 上工作时,我尝试了下面的代码,但它给了我 不允许同步操作。调用 WriteAsync 或将 AllowSynchronousIO 设置为 true
public static void StreamJsonThenEnd(this HttpResponse httpResponse, object data)
{
httpResponse.ContentType = "application/json";
httpResponse.StatusCode = StatusCodes.Status200OK;
using (StreamWriter writer = new StreamWriter(httpResponse.Body))
using (JsonTextWriter jsonWriter = new JsonTextWriter(writer))
{
JsonSerializer ser = new JsonSerializer();
ser.Serialize(jsonWriter, data);
jsonWriter.Flush();
}
}
我也试过
public static async Task StreamJsonThenEnd(this HttpResponse httpResponse, object data)
{
httpResponse.ContentType = "application/json";
httpResponse.StatusCode = StatusCodes.Status200OK;
await System.Text.Json.JsonSerializer.SerializeAsync(httpResponse.Body, data, data.GetType());
}
但它现在抛出 无法修改响应标头,因为响应已经开始
如何在 ASP.Net Core 中流式传输我的 json 对象?
【问题讨论】:
-
如果数据是可拆分的,可以尝试多次发送。
标签: json asp.net-core stream