5

有一个教程实际上适用于带有 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 中,最后两行是关闭连接的代码(我假设),检测到错误。但是,它可以在不关闭连接的情况下正常工作,但是几率是多少?为什么我们必须关闭连接?如果我不这样做会出什么问题?“关闭连接”甚至是什么意思?

4

4 回答 4

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();
}
于 2013-06-14T11:31:56.910 回答
0

也许他们已经close()在最新的 API 中弃用了。这应该有效:

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 的类上使用 using (在这种情况下很好)

于 2013-06-14T11:27:58.943 回答
0

我建议使用 HTTP Client 。Microsoft HTTP 客户端示例

于 2013-06-14T11:32:43.850 回答
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();
}
于 2013-06-14T11:30:52.407 回答