Используйте Uri.TryCreate , чтобы создать новый объект Uri, только если строка URL-адреса является допустимым URL-адресом.Если строка не является допустимым URL, TryCreate возвращает false.
string myString = "http://someUrl";
Uri myUri;
if (Uri.TryCreate(myString, UriKind.RelativeOrAbsolute, out myUri))
{
//use the uri here
}
ОБНОВЛЕНИЕ
TryCreate или конструктор Uri с радостью примут строки, которые могут показаться недействительными, например, "Host: www.stackoverflow.com", "Host:% 20www.stackoverflow.com "или" chrome: about ".Фактически, это совершенно допустимые URI, которые задают пользовательскую схему вместо «http».
В документации к свойству Uri.Scheme приведены дополнительные примеры, например "gopher:" (кто-нибудь помнит это?), "News", "mailto", "uuid".
Приложение может зарегистрироваться как обработчик настраиваемого протокола, как описано в MSDN или других вопросах SO, например Как зарегистрировать настраиваемый протокол URL в Windows?
TryCreate не позволяет ограничивать себя конкретными схемами.Код должен проверить свойство Uri.Scheme, чтобы убедиться, что оно содержит допустимое значение
ОБНОВЛЕНИЕ 2
Передача странной строки, такой как "></script><script>alert(9)</script>
, вернет true
и построить относительный объект Uri.Вызов Uri.IsWellFormedOriginalString все же вернет false.Поэтому вам, вероятно, нужно позвонить IsWellFormedOriginalString
, если вы хотите убедиться, что относительный Uris правильно сформирован.
С другой стороны, вызов TryCreate
с UriKind.Absolute
вернет false в этом случае.
Интересно, что Uri.IsWellFormedUriString вызывает TryCreate внутренне, а затем возвращает значение IsWellFormedOriginalString
, если был создан относительный Uri.