C #, Есть ли лучший способ проверить форматирование URL, чем IsWellFormedUriString? - PullRequest
10 голосов
/ 12 апреля 2011

Есть ли лучший / более точный / более строгий метод / способ выяснить, правильно ли отформатирован URL-адрес?

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

bool IsGoodUrl = Uri.IsWellFormedUriString(url, UriKind.Absolute);

Нетне поймать всеЕсли я ввожу htttp://www.google.com и запускаю этот фильтр, он проходит.Тогда я получаю NotSupportedException позже, когда звоню WebRequest.Create.

Этот плохой URL также пропустит следующий код (который является единственным другим фильтром, который я смог найти):

Uri nUrl = null;
if (Uri.TryCreate(url, UriKind.Absolute, out nUrl))
{
    url = nUrl.ToString(); 
}

Ответы [ 4 ]

13 голосов
/ 12 апреля 2011

Причина, по которой Uri.IsWellFormedUriString("htttp://www.google.com", UriKind.Absolute) возвращает true, заключается в том, что он находится в форме, которая может быть допустимым Uri. URI и URL не совпадают.

См .: В чем разница между URI и URL?

В вашем случае я бы проверил, что new Uri("htttp://www.google.com").Scheme равно http или https.

8 голосов
/ 12 апреля 2011

Технически, htttp://www.google.com - это правильно отформатированный URL, согласно спецификации URL . NotSupportedException был брошен, потому что htttp не является зарегистрированной схемой. Если бы это был плохо отформатированный URL, вы бы получили UriFormatException. Если вам важны только HTTP (S) URL, то просто проверьте схему.

3 голосов
/ 23 июля 2014

@ Решение Грега верное. Однако вы можете использовать URI и проверить правильность всех протоколов (схем), которые вы хотите использовать.

public static bool Url(string p_strValue)
{
    if (Uri.IsWellFormedUriString(p_strValue, UriKind.RelativeOrAbsolute))
    {
        Uri l_strUri = new Uri(p_strValue);
        return (l_strUri.Scheme == Uri.UriSchemeHttp || l_strUri.Scheme == Uri.UriSchemeHttps);
    }
    else
    {
        return false;
    }
}
0 голосов
/ 22 октября 2013

Этот код отлично подходит для проверки Textbox правильного формата URL

if((!string.IsNullOrEmpty(TXBProductionURL.Text)) && (Uri.IsWellFormedUriString(TXBProductionURL.Text, UriKind.Absolute)))
{
     // assign as valid URL                
     isValidProductionURL = true; 

}
...