此帖子数据是否有两个请求?

时间:2016-02-18 04:28:11

标签: c# web http-post

我从Stackoverflow中获取了以下代码,并在我的Web应用程序中使用它。我目前面临的一个问题是,如果我使用此方法提交的用户名和密码的凭据不正确,则会在目标网站上计算两次。

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://www.yoursite.com");
request.Method = "POST";

formContent = "Username=" + someValue +
"&Password" + someValue2;

byte[] byteArray = Encoding.UTF8.GetBytes(formContent);
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = byteArray.Length;
Stream dataStream = request.GetRequestStream();
dataStream.Write(byteArray, 0, byteArray.Length);
dataStream.Close();
WebResponse response = request.GetResponse();
dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
string responseFromServer = HttpUtility.UrlDecode(reader.ReadToEnd());

reader.Close();
dataStream.Close();
response.Close();         

我想知道双重请求是否是由以下两行引起的,每行都在上面的代码片段中发出请求:

Stream dataStream = request.GetRequestStream();
WebResponse response = request.GetResponse();

非常感谢!

1 个答案:

答案 0 :(得分:0)

简而言之,是的:“双重请求是由以下两行引起的,每行都在上面的代码片段中发出请求”。

这些方法中的每一种都是自己执行请求。

来自GetResponse的文档:

  

GetResponse方法返回一个WebResponse对象,该对象包含来自Internet资源的响应。返回的实际实例是HttpWebResponse,可以对该类进行类型转换以访问特定于HTTP的属性。

来自GetRequestStream的文档:

  

GetRequestStream方法返回用于发送HttpWebRequest数据的流。返回Stream对象后,您可以使用Stream.Write方法使用HttpWebRequest发送数据。   如果应用程序需要设置ContentLength属性的值,则必须在检索流之前完成此操作。   您必须调用Stream.Close方法来关闭流并释放连接以便重用。无法关闭流会导致应用程序用完连接。