我正在尝试使用HttpWebRequest发送GET请求
我在网上找到了很多例子(例如,this one ...只需转到Scrape()
方法)。他们基本上都做同样的事情:
使用WebRequest.Create(URL)创建HttpWebRequest
对象并将其强制转换为HttpWebRequest
,然后使用GetResponse()
中的HttpWebRequest
方法获取响应。< / p>
事情是,GetResponse()
或HttpWebRequest
(它是基类)中似乎不存在WebRequest
。我唯一的选择是使用BeginGetResponse()
。
我发现唯一的事情是GetResponse()
是同步的,而BeginGetResponse()
是异步的,而Silverlight只允许异步的。{1}}。好吧,这对我没有任何帮助,因为整个事情都是一个XNA项目,这是我在里面创建的一个简单的C#类。
更确切地说,这是一款在XNA 4.0中创建的Windows Phone游戏
HttpWebRequest webRequest = WebRequest.Create(URL) as HttpWebRequest;
StreamReader responseReader = new StreamReader(
webRequest.GetResponse().GetResponseStream());
有没有人知道为什么我没有GetResponse()
?
答案 0 :(得分:16)
Windows Phone 7的XNA 4只能进行异步调用。您可能会发现this post底部的代码也很有用。
该帖子的代码:
protected override void Initialize()
{
string webServiceAddress = @"http://localhost/service/service1.asmx";
string methodName = "HelloWorld";
string webServiceMethodUri = string.Format("{0}/{1}", webServiceAddress, methodName);
HttpWebRequest httpWebRequest = (HttpWebRequest)HttpWebRequest.Create(webServiceMethodUri);
httpWebRequest.Method = "POST";
httpWebRequest.BeginGetResponse(Response_Completed, httpWebRequest);
base.Initialize();
}
void Response_Completed(IAsyncResult result)
{
HttpWebRequest request = (HttpWebRequest)result.AsyncState;
HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(result);
using (StreamReader streamReader = new StreamReader(response.GetResponseStream()))
{
string xml = streamReader.ReadToEnd();
using(XmlReader reader = XmlReader.Create(new StringReader(xml)))
{
reader.MoveToContent();
reader.GetAttribute(0);
reader.MoveToContent();
message = reader.ReadInnerXml();
}
}
}