Есть ли способ проверки URL-адресов в .Net, ASP.Net или ASP.Net MVC?
Есть ли проверка подлинности URL на .Net?
Ответ 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, чтобы найти больше.