解析以下可能形式的环境变量的最佳和最简单的方法是什么:host[:port]
redisredis:637910.0.0.7210.0.0.72:6379my.domain.namemy.domain.name:6379输入从来不以协议为前提。
最终目标是解析主机和端口,以便创建一个System.Net.IPEndPoint类型的对象,可能是在使用Dns.GetHostAddresses(host)[0]之后,这取决于环境变量中是否提供了ip或主机名。
其目的是帮助dotnet核心应用程序在各个码头容器中根据它们的环境变量中指定的值相互发现。
我希望利用dotnet核心库中已有的解析实用程序,而不是使用我自己的解析器。
new Uri("redis:6379")产生无效的结果。
Https://“生成一个具有正确的主机和端口属性的Uri对象,但在我看来,有必要通过”new Uri("https://redis:6379")“前缀来修改所有输入,以使Uri对象能够正确地解析它,这似乎是荒谬的。
new Uri("https://redis")错误地将Port属性设置为443,并没有表示它没有在用户输入中提供。
如果可以跳过解析步骤,直接解析到没有中间步骤的IPEndPoint,那将是我的首选答案。
这是我目前正在使用的,删除了错误处理。你有更好的东西吗?
IPEndPoint ParseGateway(string input) {
var parts = input.Split(':');
var host = parts[0];
var port = parts.Length > 1 ? int.Parse(parts[1]) : DEFAULT_GATEWAY_PORT;
var ip = Dns.GetHostAddresses(host)[0];
return new IPEndPoint(ip, port);
}发布于 2018-03-11 07:42:34
使用string方法SubString,如下所示:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string[] inputs = {
"redis",
"redis:6379",
"10.0.0.72",
"10.0.0.72:6379",
"my.domain.name",
"my.domain.name:6379"
};
string address = "";
string port = "";
foreach (string input in inputs)
{
if (input.Contains(":"))
{
address = input.Substring(0, input.IndexOf(":"));
port = input.Substring(input.IndexOf(":") + 1);
}
else
{
address = input;
port = "";
}
Console.WriteLine("Address : '{0}'; Port : '{1}'", address, port);
}
Console.ReadLine();
}
}
}https://stackoverflow.com/questions/49217485
复制相似问题