Класс для распознавания порта из строки - PullRequest
0 голосов
/ 05 июля 2019

У меня есть метод, который получает URL в разных вариациях, как

foo.bar.com: 5678

Мне нужно получить порт из этого как

System.Uri foo = new Uri("foo.bar.com:5678");
int port = foo.Port;

но всегда возвращает -1 вместо 5678

Ответы [ 2 ]

1 голос
/ 05 июля 2019

Добавить протокол к строке или разбить его самостоятельно, используя пользовательский метод:

static readonly char[] s_splitter = new char[1] { ':' };
static int GetPort(string s)
{
    int port = -1;
    if (string.IsNullOrEmpty(s))
        return port;

    string[] parts = s.Split(s_splitter);
    if (parts.Length == 2)
        int.TryParse(parts[1], out port);
    return port;
}

Если вы используете .NET Core или System.Memory NuGet, вы можете получить порт без выделения дополнительных строк:

static int GetPort(string s)
{
    int port = -1;
    if (string.IsNullOrEmpty(s))
        return port;

    ReadOnlySpan<char> span = s;
    int index = span.IndexOf(':');
    if (index == -1 || s.Length < index)
        return port;

    int.TryParse(span.Slice(index + 1), out port);
    return port;
}
0 голосов
/ 05 июля 2019

чтобы получить port из URI, требуется, чтобы URI имел protocol

https://rextester.com/TRDAKO93228

public class Program
{
    public static void Main(string[] args)
    {
       System.Uri foo1 = new Uri("foo.bar.com:5678");
        int port1 = foo1.Port;  // it will return -1 as no protocol specified.
        System.Uri foo2 = new Uri("http://foo.bar.com:5678");
        int port2 = foo2.Port;  // it will return 5678
        System.Uri foo3 = new Uri("ftp://foo.bar.com:5678");
        int port3 = foo3.Port;  // it will return 5678
        System.Uri foo4 = new Uri("https://foo.bar.com");
        int port4 = foo4.Port;  // it will return 443 - default for HTTPS
        Console.WriteLine(port1);
        Console.WriteLine(port2);
        Console.WriteLine(port3);
        Console.WriteLine(port4);
    }
}

, если у вас есть простая строка, у которой нет протокола,Вы можете добавить http:// ИЛИ ftp:// или другие, но помните, что если вы добавили предварительно протокол и если ваш URI не имеет порта, он вернет порт по умолчанию для этого протокола. (Обратите внимание на port4)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...