收到“请求被取消”;向HttpWebRequest写入JSON数据时出现错误

本文关键字:数据 JSON 写入 错误 HttpWebRequest 请求 取消 请求被取消 收到 | 更新日期: 2023-09-27 18:19:07

我有一个使用Monodevelop用c#编写的iOS应用程序,作为应用程序的一部分,我调用了一个web服务。web服务调用需要将JSON数据写入请求。然而,我收到一个错误,我第一次尝试写数据;对具有相同参数的同一方法的所有后续调用都可以工作。以下是相关代码片段:

// Start snippet
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create (_connectionSettings.Uri);
request.Timeout = 15000; // milliseconds
if (_connectionSettings.Username != "") {
    request.Credentials = new NetworkCredential (_connectionSettings.Username, _connectionSettings.Password);
}
if (post) {
    request.Method = "POST";
    request.ContentType = "application/json";
    if (jsonData != null) {
        byte[] byteArray = System.Text.Encoding.UTF8.GetBytes(jsonData);
        request.ContentLength = byteArray.Length;    
        using (Stream ds = request.GetRequestStream()) {  //<--- ERROR HERE
            ds.Write (byteArray, 0, byteArray.Length);
        }
    } else {
        request.Method = "GET";
}
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) {
// end snippet
我得到的错误如下:

System.Net。webeexception:请求被取消。--->系统。例外:在写入所有字节之前无法关闭流——内部异常堆栈跟踪结束——at

System.Net.WebConnectionStream。Close ()在

[0 x00121]

/开发/MonoTouch/源/mono/mcs/类/系统/System.Net/WebConnectionStream.cs: 785at System.IO.Stream.Dispose () [0x00000] in

/开发/MonoTouch/源/mono/mcs/类/corlib/先/Stream.cs: 93在

MyCustomMethod (System.String&responseString、系统。字符串jsonData, Boolean post,[0x00101] in/Path/To/My/Class.cs:192

你知道我做错了什么吗?

编辑

好了,显然,在逐步执行应用程序时,该方法每次都有效。我注意到的是,当抛出错误时,请求。ContentLength为零,尽管byteArray。长度是非零的。但是,在逐步完成应用程序时,请求。ContentLength保持byteArray.Length.

收到“请求被取消”;向HttpWebRequest写入JSON数据时出现错误

的期望值

好的,看起来我们不需要设置请求。内容长度。删除行:

request.ContentLength = byteArray.Length;

完全修复了这个问题。我仍然很好奇,如果这是一个错误的库,因为大多数代码样本显示设置HttpWebRequest的ContentLength,它在随后的尝试正常工作。