Подтвердить что ты не робот

Есть ли проверка подлинности URL на .Net?

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

Полученные ответы, тем не менее, не проверяют схему, позволяющую использовать все виды нежелательного ввода, которые могут сделать вас уязвимыми для 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;
}

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

Ответ 3

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

Ответ 4

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

Ответ 5

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

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