private void button1_Click(object sender, EventArgs e)
{
txtAnswer.Text += URL_razbor(txtDomain.Text) + Environment.NewLine + Environment.NewLine;
}
private string URL_razbor(string a)
{
//Если адрес введён без префикса протокола, то по умолчанию принимаем его как http
if (a.IndexOf("://") == -1)
{
a = "http://" + a;
}
try
{
System.Uri uri = new System.Uri(a);
// Получаем порт
int port = uri.Port;
// Получаем имя хоста
string host = uri.Host;
// Получаем имя протокола
string protocol = uri.Scheme;
// Получаем чистый URL
string cleanURL = uri.Scheme + "://" + uri.GetComponents(UriComponents.HostAndPort, UriFormat.UriEscaped);
return "URL - " +a + Environment.NewLine + "Port - " + port.ToString() + ", Host - " + host + ", protocol - " + protocol + ", cleanURL - " + cleanURL;
}
catch (UriFormatException)
{
return "Адрес " + a + " неверен" + Environment.NewLine;
}
}
* This source code was highlighted with Source Code Highlighter.
Данный код выдаст следующие -
URL - http://example.com:8080/viewforum.php?f=1
Port - 8080, Host - example.com, protocol - http, cleanURL - http://example.com:8080
* This source code was highlighted with Source Code Highlighter.
Почему просто не использовать регулярные выражения?
ОтветитьУдалитьПотому, что не совсем верно их использовать. К примеру если в ссылке передаётся рефер на другой сайт (к примеру - http://example.com:8080/gosite.php?f=http://example.com:8080/viewforum.php?f=1) , то регулярки либо будут глючить, либо надо дополнительные параметры вводить.
ОтветитьУдалитьПлюс много других вопросов возникает - как быть с портом и хостом.