gpt4 book ai didi

asp.net-mvc - 从 ApiController 返回 JSON 流

转载 作者:行者123 更新时间:2023-12-02 09:08:41 27 4
gpt4 key购买 nike

我有一个 JSON 对象,我需要从 MVC ApiController 返回它。

我不能简单地返回 JSON 对象,因为内部序列化程序对序列化内容太长表示反对。

我不想序列化为字符串,然后返回字符串,因为我们可能会处理 5-6MB 的数据,这似乎毫无意义地浪费内存。

我想要做的是使用 Newtonsoft JSON Serializer 直接写入响应流。

Dim Ret = Client.Search(Model) ''Get the results object
Dim Response As New HttpResponseMessage()
Using MemoryStream As New IO.MemoryStream
Using StreamWriter As New StreamWriter(MemoryStream)
Using JsonWriter As JsonWriter = New JsonTextWriter(StreamWriter)
Dim Serializer As New JsonSerializer
Serializer.Serialize(JsonWriter, Ret)
End Using
End Using
Response.Content = New StreamContent(MemoryStream)
Return Response
End Using

不幸的是,这会导致连接意外重置 - 我猜这是由于流在完成发送结果之前被丢弃?

即使我删除所有 Using block 并将所有内容留给 GC,如下所示:

Dim Ret = Client.Search(Model)
Dim Response As New HttpResponseMessage()
Dim MemoryStream As New IO.MemoryStream
Dim StreamWriter As New StreamWriter(MemoryStream)
Dim JsonWriter As JsonWriter = New JsonTextWriter(StreamWriter)
Dim Serializer As New JsonSerializer
Serializer.Serialize(JsonWriter, Ret)
Response.Content = New StreamContent(MemoryStream)
Return Response

我得到的是 0 字节响应。有人可以指出我正确的方向吗?

最佳答案

您是否尝试过检查 web.config/machine.config 中的超时设置?也许 IIS 认为获取 Response.Content 花费的时间太长。

无论如何,你应该用Failed Requests Using Tracing来检查这个问题。 - 这应该为您指明正确的方向。

关于asp.net-mvc - 从 ApiController 返回 JSON 流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13268237/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com