麻烦使用AngularJS $ http.post获取HttpResponse数据

时间:2016-10-07 18:22:13

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

我尝试将自定义对象从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。

所以,我在互联网上搜索,我相信我可以使用发送到HttpResponse对象的StreamWriter,然后刷新响应以将其返回到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代码是正确的。帮助

1 个答案:

答案 0 :(得分:0)

从您的问题中不太清楚您的位置,但看起来您在构建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#样本,这是我更熟悉的。)