【问题标题】:ContentLength error for Request Stream in C#C# 中请求流的 ContentLength 错误
【发布时间】:2014-04-27 16:26:30
【问题描述】:

我正在尝试从 C# 中的 WS 中取回一些数据,但出现此错误:

您必须在调用 [Begin]GetResponse 之前将 ContentLength 字节写入请求流。

这是我正在尝试使用的代码:

var json = new JavaScriptSerializer().Serialize(order);
        string jsonResponseToString = "";
        HttpWebRequest request =
            (HttpWebRequest)WebRequest.Create("https://myurl.com");
        request.Method = "POST";
        System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding();
        Byte[] byteArray = encoding.GetBytes(json);
        request.ContentLength = byteArray.Length;
        request.ContentType = @"application/json";
        try
        {                
            using (var response = (HttpWebResponse)request.GetResponse())
            {
                Stream str = response.GetResponseStream();
                var sr = new StreamReader(str, encoding);                    
                
                jsonResponseToString = sr.ReadToEnd();
                var result = new OrderResult();
                result = new JavaScriptSerializer().Deserialize<OrderResult>(jsonResponseToString);
                if (str != null)
                {
                    str.Flush();
                    str.Close();
                }
            }
        }
        catch (WebException ex)
        {
            // 
        }               

错误发生在这一行:

using (var response = (HttpWebResponse)request.GetResponse())

我该如何解决这个问题,我做错了什么?

【问题讨论】:

  • 使用HttpClient;好多了。

标签: c# asp.net json rest webclient


【解决方案1】:

正如错误试图告诉您的那样,您需要先将字节写入请求,然后才能发送它。

致电GetRequestStream() 并写入您的字节。

【讨论】:

  • 我应该在哪里调用该方法,在“使用”语句之前?谢谢帮助
  • 在发送请求之前 (GetResponse())。记得处置流。
  • 我正在添加 request.GetRequestStream();在 GetResponse 之前,它没有错误,但是我在 using 语句上再次遇到错误。正如您从示例中看到的那样,我在完成使用后处理流,我应该在什么时候处理流?谢谢
  • 你还需要写入流。
猜你喜欢
  • 1970-01-01
  • 2019-06-02
  • 1970-01-01
  • 2017-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-18
  • 2019-02-24
相关资源
最近更新 更多