Есть ли валидатор URL в .Net? - PullRequest
34 голосов
/ 29 мая 2009

Есть ли способ проверки URL в .Net, ASP.Net или ASP.Net MVC?

Ответы [ 5 ]

44 голосов
/ 30 мая 2009

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

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

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

35 голосов
/ 03 мая 2013

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

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

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

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

    if (Uri.TryCreate(url, UriKind.Absolute, out Uri 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;
}

Определите, какие схемы вы разрешите, и измените код соответствующим образом.

15 голосов
/ 22 февраля 2012

Вы можете использовать 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 голосов
/ 30 мая 2009

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

Вот ссылка на образец Regex - используйте Google, чтобы узнать больше.

0 голосов
/ 30 мая 2009
static bool IsValidUri(string urlString) {
   try {
      new Uri(urlString);
      return true;
   } catch {
      return false;
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...