2009-05-29 7 views

ответ

44

Вы можете использовать Uri.TryCreate для проверки в URL:

public bool IsValidUri(string uri) 
{ 
    Uri validatedUri; 
    return Uri.TryCreate(uri, UriKind.RelativeOrAbsolute, out validatedUri); 
} 

Комментарии предполагают, что TryCreate просто перемещает обработку на один уровень вниз исключение. Однако я проверил исходный код и обнаружил, что это не так. Внутри TryCreate нет try/catch, он использует настраиваемый парсер, который не должен бросать.

+0

Это лучше, чем предполагаемые реализации try/catch. – RichardOD

+0

В случае, если вы на 2.0+, конечно ... –

+1

Хотя это просто хоронят попытку/поймать еще один уровень вниз, где вам не нужно его видеть. –

0
static bool IsValidUri(string urlString) { 
    try { 
     new Uri(urlString); 
     return true; 
    } catch { 
     return false; 
    } 
} 
+0

См. Комментарий относительно производительности на ответе диво –

0

Более быстрый способ (возможно), чем использование функции try/catch, заключается в использовании Regex. Если вам нужно было проверять 1000 URL-адресов, перехватывание исключения несколько раз было бы медленным.

a link to sample Regex - используйте Google, чтобы найти больше.

+0

как-то я сомневаюсь в этом. регулярные выражения, даже скомпилированные, не особенно быстры. даже если бы вы могли написать то, что было точным. – Kris

+0

Это будет быстрее, но намного сложнее получить право. –

+1

Крис - возможно, вы не понимаете, как могут быть дорогостоящие исключения исключения - они очень медленны, если они выполняются в большой петле. – RichardOD

13

Вы можете использовать Uri.IsWellFormedUriString, нет необходимости, чтобы создать свою собственную функцию для этого:

public static bool IsWellFormedUriString(string uriString, uriKind uriKind); 

Где uriKind может быть:

UriKind.RelativeOrAbsolute 
UriKind.Absolute 
UriKind.Relative 

Для получения дополнительной информации см: http://msdn.microsoft.com/en-us/library/system.uri.iswellformeduristring.aspx

+0

Это не работает во многих ситуациях – Farshid

30

Ответы, предоставленные таким образом, не проверяют схему, позволяя использовать все виды нежелательного ввода, которые могут сделать вас уязвимыми для javascript-инъекций (см. Комментарий TheCloudle ssSky).

URI - это уникальная идентификация объекта. «C: \ Test» является допустимым URI.

В моем проекте я использовал следующий код:

/// <summary> 
/// Validate a URL. 
/// </summary> 
/// <param name="url"></param> 
/// <returns></returns> 
private bool ValidUrl(string url) 
{ 
    Uri validatedUri; 

    if (Uri.TryCreate(url, UriKind.Absolute, out validatedUri)) //.NET URI validation. 
    { 
     //If true: validatedUri contains a valid Uri. Check for the scheme in addition. 
     return (validatedUri.Scheme == Uri.UriSchemeHttp || validatedUri.Scheme == Uri.UriSchemeHttps); 
    } 
    return false; 
} 

Определить, какие схемы позволите и изменить код соответственно.

+1

+1, Это лучший ответ, а также уникальный, который действительно отвечает на вопрос «как проверить URL», ** URL ** !. – ElektroStudios

Смежные вопросы