【问题标题】:Trouble Getting HttpResponse data with AngularJS $http.post使用 AngularJS $http.post 获取 HttpResponse 数据时遇到问题
【发布时间】:2016-10-07 18:22:13
【问题描述】:

我尝试将自定义对象从 VB.NET 代码返回到 AngularJS HTTP Post。根据用户请求,该对象可能非常大。非常非常大。每当发生这种情况时,我在尝试对其进行序列化时都会遇到 OutOfMemoryException。因此,我现在使用来自 Newtonsoft 的 JSON.NET 包来使用 StringWriter 对其进行序列化:

Using sw As New StringWriter()
    Using writer As JsonWriter = New JsonTextWriter(sw)
        Dim serializer As New JsonSerializer()
        serializer.Serialize(writer, periodData)
        writer.Flush()
    End Using
End Using

虽然这可行,但当我尝试执行 sw.ToString 时,我仍然会收到 OutOfMemoryException。

所以,我浏览了互联网,我相信我可以使用 StreamWriter 发送到 HttpResponse 对象,然后刷新响应以将其返回给 Web 客户端调用。但是,我不知道该怎么做。

有什么帮助吗?或者,如果我偏离了轨道,请给我一个更好的方法来做到这一点?

更新 1

显然,我不能在 Using 语句中使用 HttpResponse,因为我收到“使用操作数必须实现 system.idisposable”错误。所以现在我无法在 WebMethod 中创建 HttpResponse 对象。将 TextWriter 和 HttpWriter 作为构造函数的参数传递给我错误。

更新 2

好的,所以我在尝试序列化对象时不再收到 OutOfMemoryException。但是,我相信我做错了什么,因为我的 StreamWriter 似乎没有写入 HttpResponse 对象。这是我当前的代码:

Dim response As HttpResponse = HttpContext.Current.Response()
response.ContentType = "application/json"
response.Clear()
response.BufferOutput = True

Using sw As New StreamWriter(response.OutputStream, System.Text.Encoding.UTF8)
    Using writer As JsonWriter = New JsonTextWriter(sw)
        Dim serializer As New JsonSerializer()
        serializer.Serialize(writer, periodData)
        writer.Flush()
    End Using
    sw.Flush()
End Using

response.Flush()

然后,当我在 Chrome 开发者控制台中暂停我的 JavaScript 时,响应对象只是一个空字符串。 javascript 只是一个基本的 Angular $http.post 调用:

$http.post('url.aspx/GetData', angular.toJson({
    param1: data1,
    param2: data2,
    param3: data3
})).then(function (response) {
    //Do stuff with response which is currently an empty string.
}

我不相信我的 VB.NET 代码是正确的。帮忙?

【问题讨论】:

  • 内存不足并不是您的问题,因为您已经确定了解决方案 我可以使用 StreamWriter 发送到 HttpResponse 对象,然后刷新响应以将其返回到网络客户来电。你为什么不试试呢?如果您遇到问题,我们可以提供帮助,但我们无法为您编写代码 :)

标签: angularjs vb.net http-post out-of-memory code-behind


【解决方案1】:

从您的问题中不太清楚您在哪里,但看起来您在构建 StreamWriter 以写入 HttpResponse 时遇到了麻烦。

可以从 HttpContext 中获取响应对象:

[WebMethod]
public static void YourServiceMethod()
{
    HttpResponse response = HttpContext.Current.Response;

    // ... now go on
}

响应对象有一个属性OutputStream,您可以将其赋予StreamWriter 的构造函数(在using 语句中),就像在this answer 中对另一个问题一样:

using (TextWriter textWriter = new StreamWriter(response.OutputStream, System.Text.Encoding.UTF8))
{
    // ... now write your data
}

(请原谅我提供 C# 示例,这是我比较熟悉的。)

【讨论】:

  • 如何将 StreamWriter 数据放入 HttpResponse 对象?尝试刷新 JsonWriter、StreamWriter 和 HttpResponse 对象。没有工作。
  • @MichaelWang StreamWriter 写入响应的输出流,然后您写入 StreamWriter - 基本上就是这样。 --- 你真的应该听从 Verdolino 的建议,把你当前代码的精髓放到你的问题中。可能只是一个小细节有问题。
猜你喜欢
  • 1970-01-01
  • 2021-03-03
  • 2020-12-11
  • 2022-01-24
  • 2013-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-14
相关资源
最近更新 更多