Windows 8 C# - 将网页源检索为字符串

时间:2013-06-14 11:12:56

标签: c# html windows-8

有一个教程实际适用于带有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行是关闭连接的代码(我假设),检测到错误。尽管如此,它在没有关闭连接的情况下工作正常,但有什么可能性?为什么我们必须关闭连接?如果我不这样做可能会出错? “关闭连接”甚至意味着什么?

4 个答案:

答案 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

相关问题