Wen*_*Wen 4 c# post webrequest httpwebrequest
这是我试图用来将POST数据发送到URL并带回其响应的方法:
public string sendPOST(string URL, string postData)
{
byte[] byteArray;
Stream webpageStream;
StreamReader webpageReader;
String webpageContent;
byteArray = Encoding.UTF8.GetBytes(postData);
_webRequest = WebRequest.Create(URL);
_webRequest.Method = "POST";
_webRequest.ContentType = "application/x-www-form-urlencoded";
_webRequest.ContentLength = byteArray.Length;
webpageStream = _webRequest.GetResponse().GetResponseStream();
webpageStream.Write(byteArray, 0, byteArray.Length);
webpageStream.Close();
webpageReader = new StreamReader(webpageStream);
webpageContent = webpageReader.ReadToEnd();
return webpageContent;
}
Run Code Online (Sandbox Code Playgroud)
我从MSDN网页上获得了很多这样的代码,所以我知道我大致走在正确的轨道上...但是当我使用以下方法调用该方法时:
string test = webHelper.sendPOST("http://google.com", "var=1");
MessageBox.Show(test);
Run Code Online (Sandbox Code Playgroud)
应用程序刚刚锁定.我调试了该方法,据我所知,代码运行良好,直到这一行:
webpageStream = _webRequest.GetResponse().GetResponseStream();
Run Code Online (Sandbox Code Playgroud)
我试过在try块中把它包起来但是根本没有抛出任何exeptions.
有没有人有足够的网络请求经验来帮助我?
非常感谢 :)
Gee*_*eek 12
我意识到这是一个古老的问题但我认为我会提供正确使用using语句的答案,因此无需调用'Close'即可完成连接的关闭.webrequest也可以在SendPost方法的范围内声明.
public string SendPost(string url, string postData)
{
string webpageContent = string.Empty;
try
{
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);
webRequest.Method = "POST";
webRequest.ContentType = "application/x-www-form-urlencoded";
webRequest.ContentLength = byteArray.Length;
using (Stream webpageStream = webRequest.GetRequestStream())
{
webpageStream.Write(byteArray, 0, byteArray.Length);
}
using (HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse())
{
using (StreamReader reader = new StreamReader(webResponse.GetResponseStream()))
{
webpageContent = reader.ReadToEnd();
}
}
}
catch (Exception ex)
{
//throw or return an appropriate response/exception
}
return webpageContent;
}
Run Code Online (Sandbox Code Playgroud)
这也是以下答案/sf/answers/23549431/
希望这可以帮助
您的代码中存在逻辑错误:
webpageStream.Close();
webpageReader = new StreamReader(webpageStream);
Run Code Online (Sandbox Code Playgroud)
您正在关闭流,然后尝试从中读取.一旦流关闭,它实际上已经死了.
更根本的问题是你试图将你的请求写入响应,这不仅是荒谬的,而且也是不可能的!你想要做的是写入请求流,然后得到这样的响应:
webpageStream = _webRequest.GetRequestStream();
webpageStream.Write(byteArray, 0, byteArray.Length);
webpageStream.Close();
webpageReader = new StreamReader(_webRequest.GetResponse().GetResponseStream());
Run Code Online (Sandbox Code Playgroud)