2013-06-14 34 views
5

olarak bir web sayfasının kaynağını almak aslında XAML ve C# ile Windows 8 platformu için çalışan bir öğretici var: http://www.tech-recipes.com/rx/1954/get_web_page_contents_in_code_with_csharp/Windows 8 C# - dize

İşte nasıl: Ancak

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, sonuncu Bağlantıyı kapatmak için kod olan 2 satır (varsayalım), algılanan hata. Bağlantıyı kapatmadan gayet iyi çalışıyor, ama ihtimaller neler? Neden bağlantıyı kapatmak zorundayız? Yapmazsam yanlış olan ne olabilir? "Kapatma bağlantısı" ne anlama geliyor?

+0

Ne hatalar alabilirim? Düzenleyebileceğim zaman hatayı çalışma zamanı değil – ZorleQ

+0

bir hata var: 'System.IO.SystemReader' 'Yakın' ve 'Close' hiçbir uzantı yöntemine .NET hangi sürümü yapmak blablabla –

+0

yüklediğiniz için bir tanım içermiyor ? Windows 8 olmayabilir, ancak .NET sürümü olabilir. regedit üzerinde – webnoob

cevap

3

Eğer kullandığınız kullanabilirsiniz

Sadece (OP referans için) işaret etmek:

webnoob yorumuna vurgulamak için Windows 8 için geliştiriyorsunuz, daha iyi bir kullanıcı deneyimi sağlamak için eşzamansız yöntemleri kullanmayı düşünmelisiniz ve yeni standart önerilmektedir. Ben HTTP Client s kullanarak öneriyoruz

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(); 
} 
+0

Basit ve verimli. Teşekkürler. –

0

Belki son API close() kaldırılmış ettik. Bu çalışması gerekir:

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 komut otomatik nesneleri imha edecektir. Yalnızca (bu durumda gayet) IDisposable uygulamak sınıfları

+0

yüklü söylüyor. – webnoob

+0

Kesinlikle doğru. – ZorleQ

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(); 
}