2009-07-01 25 views
7

Tôi có một đối tượng Uri được truyền cho một nhà xây dựng của lớp học của tôi.Có cách nào dễ dàng để mở một Uri và nhận được bất cứ điều gì nó trỏ đến? (C#)

Tôi muốn mở tệp Uri trỏ đến, cho dù đó là địa phương, mạng, http, bất cứ điều gì và đọc nội dung thành chuỗi. Có cách nào dễ dàng để thực hiện việc này hay tôi phải cố gắng làm việc như Uri.IsFile để tìm cách mở nó?

Trả lời

9
static string GetContents(Uri uri) { 
    using (var response = WebRequest.Create(uri).GetResponse()) 
    using (var stream = response.GetResponseStream()) 
    using (var reader = new StreamReader(stream)) 
     return reader.ReadToEnd(); 
} 

Nó sẽ không hoạt động cho bất cứ điều gì. Tính năng này hoạt động cho các số file://, http://https://ftp:// theo mặc định. Tuy nhiên, bạn có thể đăng ký trình xử lý URI tùy chỉnh với WebRequest.RegisterPrefix để làm cho nó hoạt động cho những trình xử lý đó.

5

Cách đơn giản nhất là sử dụng lớp WebClient:

using(WebClient client = new WebClient()) 
{ 
    string contents = client.DownloadString(uri); 
} 
+1

Đáng buồn thay, nó không thread-safe, mà là một vấn đề, và từ những gì tôi có thể nhìn thấy từ lướt qua, nó chỉ hỗ trợ HTTP (I cần tập tin ít nhất: // quá) –

+0

@Matthew: Bên trong, nó chỉ sử dụng 'WebRequest' để nó hỗ trợ file: // và ftp: //. Nếu bạn cần kiểm soát nhiều hơn, bạn nên sử dụng 'WebRequest' trực tiếp. Nếu bạn chỉ muốn một chuỗi trở lại, sử dụng 'WebClient'. –

+0

Nó hỗ trợ các URI khác. Nó không chỉ giới hạn ở HTTP. Và bạn có ý nghĩa gì khi không an toàn chỉ? –

Các vấn đề liên quan