【问题标题】:.net GetResponse Error getting response stream (ReadDone2): ReceiveFailure.net GetResponse 获取响应流时出错(ReadDone2):ReceiveFailure
【发布时间】:2018-10-31 06:38:58
【问题描述】:
    private string PostWebRequest(string postUrl, string paramData)
    {

        byte[] bytes = Encoding.UTF8.GetBytes(paramData);

        HttpWebRequest webReq = (HttpWebRequest)WebRequest.Create(new Uri(postUrl));
        webReq.Method = "POST";
       webReq.ContentType = "application/json";
        webReq.ContentLength = bytes.Length;
        using (Stream newStream = webReq.GetRequestStream())
        {
            newStream.Write(bytes, 0, bytes.Length);
        }
        using (WebResponse res = webReq.GetResponse())
        {
            Stream responseStream = res.GetResponseStream();
            StreamReader streamReader = new StreamReader(responseStream, Encoding.GetEncoding("UTF-8"));
            string str = streamReader.ReadToEnd();
            streamReader.Close();
            responseStream.Close();
            return str;
        }
    }

当我设置 contentType 一个值时,它是失败的。像这样

异常:在 System.Net.WebConnection.HandleError (System.Net.WebExceptionStatus st,System.Exception e,System.String 其中)[0x00000] 在 :0 处 System.Net.WebConnection.ReadDone(System.IAsyncResult 结果) [0x00000] 在 :0 中 System.Net.Sockets.SocketAsyncResult+c.b__27_0 (System.Object 状态)[0x00000] 中 :0 在 System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem () [0x00000] 在 :0 处 System.Threading.ThreadPoolWorkQueue.Dispatch() [0x00000] 中 :0 在 System.Threading._ThreadPoolWaitCallback.PerformWaitCallback() [0x00000] 在:0 System.Net.WebConnection.HandleError (System.Net.WebExceptionStatus st, System.Exception e, System.String where) (at :0) 作为 WebException 重新抛出:错误 获取响应流(ReadDone2):ReceiveFailure

如果我没有设置 ContentType 一个值,它响应成功。

【问题讨论】:

标签: c# .net


【解决方案1】:

欢迎来到 SO

试试下面的

 /// <summary>
    /// Post request 
    /// </summary>
    /// <param name="httpObject"></param>
    /// <param name="parameters"></param>
    /// <returns></returns>
    public string SendRequest(HttpObject httpObject, IDictionary<string, string> parameters)
    {

        var httpWebRequest = (HttpWebRequest)WebRequest.Create(httpObject.Url);
        httpWebRequest.ContentType = "application/json";
        httpWebRequest.Method = httpObject.Method.ToString();

        if (parameters != null)
            foreach (var p in parameters)
            {
                httpWebRequest.Headers.Add(p.Key, p.Value);
            }


        string result = null;

        using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
        {
            streamWriter.Write(httpObject.Json);
            streamWriter.Flush();
            streamWriter.Close();
        }
        try
        {
            var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
            using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
            {
                result = streamReader.ReadToEnd();
            }
        }
        catch (WebException wex)
        {
            using (var streamReader = new StreamReader(wex.Response.GetResponseStream()))
            {
                result = streamReader.ReadToEnd();
            }
        }

        return result;
    }

HttpObject 类

 internal class HttpObject 
 {
    public string Url { get; set; }
    public EnumHttpMethod Method { get; set; }
    public string Json { get; set; }


 }

【讨论】:

    【解决方案2】:

    ajax 的默认内容类型是'application/x-www-form-urlencoded; charset=UTF-8'。 当您将此设置为"application/json"; 时。服务器不接受这个,因为你不是在发送 json 你是在发送字节。

    向服务器发送数据时,使用此内容类型。默认为“application/x-www-form-urlencoded; charset=UTF-8”,这在大多数情况下都可以。如果您将内容类型显式传递给 $.ajax(),那么它总是会发送到服务器(即使没有发送数据)。从 jQuery 1.6 开始,您可以传递 false 来告诉 jQuery 不要设置任何内容类型标头。注意:W3C XMLHttpRequest 规范规定字符集始终为 UTF-8;指定另一个字符集不会强制浏览器更改编码。注意:对于跨域请求,将内容类型设置为 application/x-www-form-urlencoded、multipart/form-data 或 text/plain 以外的任何内容都会触发浏览器向服务器发送预检 OPTIONS 请求。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-09
      • 2013-07-23
      • 1970-01-01
      • 1970-01-01
      • 2013-02-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多