HttpWebRequest需要等待5秒才能在PUT方法中正常工作

本文关键字:常工作 工作 方法 PUT 等待 5秒 HttpWebRequest | 更新日期: 2024-10-22 19:02:36

我正在尝试使用API,我在GET和POST方面没有任何问题,但PUT不起作用。我尝试了很多不同的例子,最后偶然发现等待超过5秒(5000毫秒不起作用,5100毫秒起作用),它开始正常工作。但为什么会这样呢?我该如何避免这种情况?每次注册表更新需要5秒,等待时间太长了,我真的不明白为什么POST在不等待的情况下工作得很好,而PUT需要5秒才能工作。

在这里,我提出了我在Thread.Sleep(5100)中使用的方法。正如我所说的,当我制作WebResponse response = request.GetResponse();时,没有这行代码会给我一个错误。

public void call(string url, object jsonObj)
        {
            try
            {
                // Create a request using a URL that can receive a post. 
                HttpWebRequest request = (HttpWebRequest) HttpWebRequest.Create(urlSplio);
                // Create POST data and convert it to a byte array.
                request.Method = "PUT";
                // Set the ContentType property of the WebRequest.
                request.ContentType = "application/json";
                request.Credentials = new NetworkCredential(WebConfigurationManager.AppSettings["User"], "WebConfigurationManager.AppSettings["Key"]");
                string json = JsonConvert.SerializeObject(jsonObj);
                byte[] byteArray = Encoding.UTF8.GetBytes(json);
                // Set the ContentLength property of the WebRequest.
                request.ContentLength = byteArray.Length;
                // Get the request stream.
                Stream dataStream = request.GetRequestStream();
                // Write the data to the request stream.
                dataStream.Write(byteArray, 0, byteArray.Length);
                // Close the Stream object.
                dataStream.Close();
                Thread.Sleep(5100);
                // Get the response.
                WebResponse response = request.GetResponse();
                // Display the status.
                Console.WriteLine(((HttpWebResponse)response).StatusDescription);
                // Get the stream containing content returned by the server.
                dataStream = response.GetResponseStream();
                // Open the stream using a StreamReader for easy access.
                StreamReader reader = new StreamReader(dataStream);
                // Read the content.
                string responseFromServer = reader.ReadToEnd();
                // Display the content.
                Console.WriteLine(responseFromServer);
                // Clean up the streams.
                dataStream.Close();
                response.Close();
            }
            catch (Exception ex)
            {
            }
        }

HttpWebRequest需要等待5秒才能在PUT方法中正常工作

我认为您可能需要重写响应流代码

在MS MS漫游上查看此漫游

private byte[] GetURLContents(string url)
{
    // The downloaded resource ends up in the variable named content. 
    var content = new MemoryStream();
    // Initialize an HttpWebRequest for the current URL. 
    var webReq = (HttpWebRequest)WebRequest.Create(url);
    // Send the request to the Internet resource and wait for 
    // the response. 
    // Note: you can't use HttpWebRequest.GetResponse in a Windows Store app. 
    using (WebResponse response = webReq.GetResponse())
    {
        // Get the data stream that is associated with the specified URL. 
        using (Stream responseStream = response.GetResponseStream())
        {
            // Read the bytes in responseStream and copy them to content.  
            responseStream.CopyTo(content);
        }
    }
    // Return the result as a byte array. 
    return content.ToArray();
}