2009-03-31 43 views

Trả lời

32

Để kiểm tra xem một địa chỉ có giá trị thay vì sử dụng ngoại lệ bạn có thể sử dụng TryCreate phương pháp:

Uri result; 
if (Uri.TryCreate("http://www.google.com", UriKind.RelativeOrAbsolute, out result)) 
{ 
    // the url is valid 
} 
+0

thats giống như nó. cảm ơn! –

+0

Bây giờ theo Uri.TryCreate url như hht: //www.gogole.com là hợp lệ. Mặc dù htt: là lược đồ không hợp lệ. Tại sao là htt: okay? –

+1

htt: là chương trình hoàn toàn hợp lệ. Một giao thức tùy chỉnh có thể định nghĩa lược đồ này. –

0

Nếu bạn đang kiểm tra xem cấu trúc của URL có hợp lệ không, thì previous answer là tốt.

Tuy nhiên, nếu bạn muốn kiểm tra xem tài nguyên thực sự tồn tại, bạn sẽ phải sử dụng các lớp bắt nguồn từ WebRequest/WebResponse. Đối với tài nguyên HTTP và FTP, các lớp HttpWebRequest/FtpWebRequest và HttpWebResponse/FtpWebRequest sẽ hoạt động tốt (như WebClient), nhưng nếu bạn có các lược đồ khác mà bạn phải hỗ trợ, bạn sẽ phải tìm các nhà cung cấp cụ thể cho lược đồ đó.

13

Sử dụng Uri .TryCreate có thể có một số vấn đề với Uris tương đối, với chuỗi như thế này "/folder/{ht.com.m\/sx.r:erp://" TryCreate trả về true, vì vậy tôi tạo ra phương pháp khuyến nông sử dụng IsWellFormedUriString và TyrCreate, tôi không chắc chắn TryCreate là cần thiết, với các bài kiểm tra nhỏ của tôi tôi nhận được kết quả tương tự có hoặc không có TryCreate

public static bool IsUri(this string source) { 
    if(!string.IsNullOrEmpty(source) && Uri.IsWellFormedUriString(source, UriKind.RelativeOrAbsolute)){ 
    Uri tempValue; 
    return (Uri.TryCreate(source, UriKind.RelativeOrAbsolute, out tempValue)); 
    } 
    return (false); 
} 

Ví dụ

address= "http://www.c$nbv.gob.mx" 
if(address.IsUri()){ 
    //returns false 
} 
address= "http://www.cnbv.gob.mx" 
if(address.IsUri()){ 
    //returns true 
} 
address= "http://www.cnbv.gob.mx:80" 
if(address.IsUri()){ 
    //returns true 
} 
address= "/directory/path" 
if(address.IsUri()){ 
    //returns true 
} 
address= "~re#l|ativ[ainco#recta\car:.\peta" 
if(address.IsUri()){ 
    //returns false 
} 
Các vấn đề liên quan