首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解析主机:端口表达式

解析主机:端口表达式
EN

Stack Overflow用户
提问于 2018-03-11 06:55:08
回答 1查看 1.4K关注 0票数 0

解析以下可能形式的环境变量的最佳和最简单的方法是什么:host[:port]

  • redis
  • redis:6379
  • 10.0.0.72
  • 10.0.0.72:6379
  • my.domain.name
  • my.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,那将是我的首选答案。

这是我目前正在使用的,删除了错误处理。你有更好的东西吗?

代码语言:javascript
复制
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);
}
EN

回答 1

Stack Overflow用户

发布于 2018-03-11 07:42:34

使用string方法SubString,如下所示:

代码语言:javascript
复制
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();
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49217485

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档