收到“请求被取消”;向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.
好的,看起来我们不需要设置请求。内容长度。删除行:
request.ContentLength = byteArray.Length;
完全修复了这个问题。我仍然很好奇,如果这是一个错误的库,因为大多数代码样本显示设置HttpWebRequest的ContentLength,它在随后的尝试正常工作。