Как проверить, является ли строка допустимым URL-адресом HTTP?


есть Uri.IsWellFormedUriString и Uri.TryCreate методы, но они, кажется, вернуть true для пути к файлам и т. д.

Как проверить, является ли строка допустимым (не обязательно активным) HTTP-URL для целей проверки ввода?

6 185

6 ответов:

попробуйте это, чтобы проверить http url (uriName - это URI, который вы хотите проверить):

Uri uriResult;
bool result = Uri.TryCreate(uriName, UriKind.Absolute, out uriResult) 
    && uriResult.Scheme == Uri.UriSchemeHttp;

или, если вы хотите принять как HTTP, так и HTTPS URL-адреса как действительные (в комментарии J0e3gan):

Uri uriResult;
bool result = Uri.TryCreate(uriName, UriKind.Absolute, out uriResult) 
    && (uriResult.Scheme == Uri.UriSchemeHttp || uriResult.Scheme == Uri.UriSchemeHttps);

этот метод отлично работает как в http, так и в https. Только одна строка:)

if (Uri.IsWellFormedUriString("https://www.google.com", UriKind.Absolute))

MSDN:IsWellFormedUriString

    public static bool CheckURLValid(this string source)
    {
        Uri uriResult;
        return Uri.TryCreate(source, UriKind.Absolute, out uriResult) && uriResult.Scheme == Uri.UriSchemeHttp;
    }

использование:

string url = "htts://adasd.xc.";
if(url.CheckUrlValid())
{
  //valid process
}

обновление: (одна строка кода) Спасибо @GoClimbColorado

public static bool CheckURLValid(this string source) => Uri.TryCreate(source, UriKind.Absolute, out Uri uriResult) && uriResult.Scheme == Uri.UriSchemeHttps;

использование:

string url = "htts://adasd.xc.";
if(url.CheckUrlValid())
{
  //valid process
}

после Uri.TryCreate вы можете проверить Uri.Scheme чтобы увидеть, если это HTTP (s).

это вернет bool:

Uri.IsWellFormedUriString(a.GetAttribute("href"), UriKind.Absolute)
Uri uri = null;
if (!Uri.TryCreate(url, UriKind.Absolute, out uri) || null == uri)
    return false;
else
    return true;

здесь url - это строка, которую вы должны проверить.