5

Tôi đang cố tải xuống chuỗi từ BẤT K webpage trang web nào trong thư viện lớp di động của mình. Tôi đã tạo các thiết lập cơ bản nhất:Tải xuống chuỗi từ URL bằng thư viện lớp di động (PCL)

  • tạo một dự án mới PCL
    • tương thích với WP8 và WinRT cũng như các thành phần bắt buộc như Silverlight

Như WebClient không tương thích với các hệ thống này, không thể sử dụng:

string data = new WebClient().DownloadString(); 

Tôi đã cố gắng sử dụng này là tốt (sử dụng this):

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); 
request.Method = HttpMethod.Get; 
HttpWebResponse response = (HttpWebResponse)await request.GetResponseAsync(); 

string data = "" 
using (var sr = new StreamReader(response.GetResponseStream())) 
{ 
    data = sr.ReadToEnd(); 
} 

Tuy nhiên, khi tôi gọi là tập thứ hai của mã từ một C# ứng dụng bên ngoài tham khảo PCL, trình gỡ lỗi đơn giản là không thành công với NO cảnh báo hoặc lỗi tin nhắn trên:

request.GetResponseAsync(); 

Có cách nào dễ dàng để tải xuống chuỗi mà tôi đang thiếu không?

* cũng vậy, tại sao trình gỡ lỗi chỉ đơn giản thoát ra mà không có giải thích?

Edit:

Dưới đây là một phương pháp tôi đã cố gắng - dựa trên một câu trả lời đã được cung cấp. Một lần nữa, phương thức này chỉ đơn giản là thoát và buộc đóng trình gỡ rối.

PCL Phương pháp:

public static async Task<string> DownloadString() 
{ 
    var url = "http://google.com"; 
    var client = new HttpClient(); 
    var data = await client.GetStringAsync(url); 

    return data; 
} 

phương pháp Calling:

private static async void Method() 
{ 
    string data = await PCLProject.Class1.DownloadString(); 
    return data; 
} 
+0

bạn đang chạy này trong ứng dụng dành cho máy tính để bàn, ứng dụng Windows Store, ứng dụng WP8 hoặc những gì khi bạn thấy hành vi này? Bạn có chắc bạn đang chờ đợi hoặc chờ đợi tất cả các nhiệm vụ? (Nếu không, chương trình có thể chỉ chạy đến khi hoàn thành và thoát trước khi quá trình tải xuống hoàn tất.) Nếu bạn đang sử dụng Windows Phone, bạn có đang làm bất cứ thứ gì chặn luồng giao diện người dùng khi hoàn tất quá trình tải xuống (tức là thông qua Task.Wait hoặc Task. Kết quả)? –

Trả lời

21

Cài đặt các gói NuGet:

  • Microsoft.Bcl.Async, có thêm hỗ trợ async/await để PCLs.
  • Microsoft.Net.Http, thêm HttpClient hỗ trợ cho PCL.

Sau đó, bạn có thể làm điều đó một cách dễ dàng:

var client = new HttpClient(); 
var data = await client.GetStringAsync(url); 
+0

Tôi vẫn gặp sự cố tương tự. Ngay cả sau khi tôi tạo ra hai dự án mới, riêng biệt - phương thức đơn giản là không thành công mà không có cảnh báo hoặc ngoại lệ.Tôi sẽ chỉnh sửa bài đăng gốc của mình để bao gồm nỗ lực này. – user1567095

+0

Đảm bảo tường lửa của bạn đang cho phép ứng dụng của bạn thông qua. Ngoài ra, hãy đảm bảo bạn đang truy cập DNS. –

+0

Tại sao tường lửa của tôi bị can thiệp? – user1567095

1

Phương pháp này làm việc cho tôi, nó trả lại mã nguồn HTML từ google.com:

public async void GetStringFromWebpage() 
{ 
    using (HttpClient wc = new HttpClient()) 
    { 
     var data = await wc.GetStringAsync("http://google.com/"); 
     Debug.WriteLine("string:" + data); 
    } 
} 
Các vấn đề liên quan