public StatusReportBgTask( ILoggerFactory loggerFactory, INacosNamingClient client, IServer server, IOptionsMonitor <NacosAspNetCoreOptions> optionsAccs) { _logger = loggerFactory.CreateLogger <StatusReportBgTask>(); _client = client; _options = optionsAccs.CurrentValue; _features = server.Features; }
private Uri GetUri(IFeatureCollection features, NacosAspNetCoreOptions config) { var port = config.Port <= 0 ? 80 : config.Port; // 1. config if (!string.IsNullOrWhiteSpace(config.Ip)) { // it seems that nacos don't return the scheme // so here use http only. return(new Uri($"http://{config.Ip}:{port}")); } var address = string.Empty; // 2. IServerAddressesFeature if (features != null) { var addresses = features.Get <IServerAddressesFeature>(); address = addresses?.Addresses?.FirstOrDefault(); if (address != null) { var url = ReplaceAddress(address); return(new Uri(url)); } } // 3. ASPNETCORE_URLS address = Environment.GetEnvironmentVariable("ASPNETCORE_URLS"); if (!string.IsNullOrWhiteSpace(address)) { var url = ReplaceAddress(address); return(new Uri(url)); } // 4. --urls var cmdArgs = Environment.GetCommandLineArgs(); if (cmdArgs != null && cmdArgs.Any()) { var cmd = cmdArgs.FirstOrDefault(x => x.StartsWith("--urls", StringComparison.OrdinalIgnoreCase)); address = cmd.Split('=')[1]; var url = ReplaceAddress(address); return(new Uri(url)); } // 5. current ip address third address = $"http://{GetCurrentIp()}:{port}"; return(new Uri(address)); }