有一个教程实际适用于带有XAML和C#的Windows 8平台:http://www.tech-recipes.com/rx/1954/get_web_page_contents_in_code_with_csharp/
以下是:
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(URL);
myRequest.Method = "GET";
WebResponse myResponse = myRequest.GetResponse();
StreamReader sr = new StreamReader(myResponse.GetResponseStream(), System.Text.Encoding.UTF8);
string result = sr.ReadToEnd();
sr.Close();
myResponse.Close();
然而,在Windows 8中,最后2行是关闭连接的代码(我假设),检测到错误。尽管如此,它在没有关闭连接的情况下工作正常,但有什么可能性?为什么我们必须关闭连接?如果我不这样做可能会出错? “关闭连接”甚至意味着什么?
答案 0 :(得分:3)
如果您正在为Windows 8开发,则应考虑使用异步方法来提供更好的用户体验,这是推荐的新标准。您的代码将如下所示:
public async Task<string> MakeWebRequest(string url)
{
HttpClient http = new System.Net.Http.HttpClient();
HttpResponseMessage response = await http.GetAsync(url);
return await response.Content.ReadAsStringAsync();
}
答案 1 :(得分:0)
也许他们已在最新的API中弃用close()
。这应该有效:
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(URL);
myRequest.Method = "GET";
using(WebResponse myResponse = myRequest.GetResponse() )
{
using(StreamReader sr = new StreamReader(myResponse.GetResponseStream(), System.Text.Encoding.UTF8))
{
string result = sr.ReadToEnd();
}
}
using
命令会自动处理您的对象。
要突出显示webnoob的评论:
只是指出(对于OP引用)你只能在实现IDisposable的类上使用(在这种情况下很好)
答案 2 :(得分:0)
using System.Net;
using System.Net.Http;
var httpClient = new HttpClient();
var message = new HttpRequestMessage(HttpMethod.Get, targetURL);
//message.Headers.Add(....);
//message.Headers.Add(....);
var response = await httpClient.SendAsync(message);
if (response.StatusCode == HttpStatusCode.OK)
{
//HTTP 200 OK
var requestResultString = await response.Content.ReadAsStringAsync();
}
答案 3 :(得分:0)
我建议使用HTTP客户端 秒。 Microsoft HTTP Client Example