C# ASP.NET Core注册要在本地主机以外的主机名上运行的服务

C# ASP.NET Core注册要在本地主机以外的主机名上运行的服务,c#,asp.net-core,.net-core,C#,Asp.net Core,.net Core,我的应用程序响应端口5000,但仅在本地主机上响应。如何更改代码,使其不仅响应localhost,而且响应类似于:https://*:5000 我需要它,这样我就能够在Kubernetes上部署并在端口5000上访问它,而不仅仅是使用localhost 下面是Program.cs代码 using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Micr

我的应用程序响应端口5000,但仅在本地主机上响应。如何更改代码,使其不仅响应localhost,而且响应类似于:
https://*:5000

我需要它,这样我就能够在Kubernetes上部署并在端口5000上访问它,而不仅仅是使用localhost

下面是Program.cs代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;

namespace myWebApp
{
    public class Program
    {
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用System.Threading.Tasks;
使用Microsoft.AspNetCore.Hosting;
使用Microsoft.Extensions.Configuration;
使用Microsoft.Extensions.Hosting;
使用Microsoft.Extensions.Logging;
名称空间myWebApp
{
公共课程
{
公共静态void Main(字符串[]args)
{
CreateHostBuilder(args.Build().Run();
}
公共静态IHostBuilder CreateHostBuilder(字符串[]args)=>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder=>
{
webBuilder.UseStartup();
});
}
}

您的方法
CreateHostBuilder
构建一个应用程序,用于侦听/响应端口
5000
上的请求。这是Kestrel web服务器的默认配置。但这几乎是应用程序所能控制的全部

现在,如果您希望应用程序响应,则必须配置网络,以便计算机(在Kubernetes内部运行应用程序)可以通过给定的URL访问,并将请求发送到
5000
端口。应用程序配置无法控制这一点


如果网络是整个网络,那么您必须注册URL以映射到计算机的IP。它是在DNS上完成的;通常在您购买URL的网站上。

您的方法
CreateHostBuilder
构建一个应用程序,用于侦听/响应端口
5000
上的请求。这是Kestrel web服务器的默认配置。但这几乎是应用程序所能控制的全部

现在,如果您希望应用程序响应,则必须配置网络,以便计算机(在Kubernetes内部运行应用程序)可以通过给定的URL访问,并将请求发送到
5000
端口。应用程序配置无法控制这一点


如果网络是整个网络,那么您必须注册URL以映射到计算机的IP。它是在DNS上完成的;通常在您购买URL的网站上。

如果您想为Kubernetes设置应用程序,可以使用非常不同的模型。但一个非常常见的情况是,您将拥有一个入口控制器,它将完成从外部网络到集群的所有通信。根据HTTP请求中的主机,它会将其重定向到您的pod和应用程序,因此应用程序甚至不知道流量是如何到达它的

基本上,无论流量如何到达应用程序,应用程序都将在端口5000上应答。web服务器(或标准Kubernetes中的入口控制器)的任务是完成其他所有工作

我建议您阅读DNS的含义,以便更好地理解这种关系


简短版本:你的应用程序不应该真正了解主机,因此你的代码很好

如果你想为Kubernetes设置你的应用程序,那里可以使用非常不同的型号。但一个非常常见的情况是,您将拥有一个入口控制器,它将完成从外部网络到集群的所有通信。根据HTTP请求中的主机,它会将其重定向到您的pod和应用程序,因此应用程序甚至不知道流量是如何到达它的

基本上,无论流量如何到达应用程序,应用程序都将在端口5000上应答。web服务器(或标准Kubernetes中的入口控制器)的任务是完成其他所有工作

我建议您阅读DNS的含义,以便更好地理解这种关系


附言:你的应用程序不应该真正了解主机,因此你的代码很好

当我想通过手机和本地网络测试我的Web应用程序时,我也遇到了类似的情况。这里的问题是,在任何应用程序可以连接到你的应用程序之前,如果你想让它在调试模式下运行和访问,那么你必须使用ASP.NET应用程序启动时使用的端口


否则,当应用程序托管在PC上时,要通过网络或其他IP地址访问它,则必须将其托管在web服务器(即IIS、nginx、kestrel)中,然后你可以给它分配一系列你想让它访问的端口。

当我想通过手机和本地网络测试我的Web应用程序时,我也遇到了类似的情况。这里的问题是,在任何应用程序可以连接到你的应用程序之前,如果你想让它在调试模式下运行和访问,那么你必须使用ASP.NET应用程序启动时使用的端口


如果要通过网络或其他IP地址访问它,而应用程序托管在您的PC上,那么您必须将其托管在web服务器(即IIS、nginx、kestrel)中,然后您可以为其分配一系列您希望访问的端口。

这是否回答了您的问题?他不是在问如何指定端口。他正在询问如何使listen使用不同于
localhost
的地址
localhost
是适当的地址,它侦听它所属的地址。连接到它的应用程序必须指定运行它的计算机或容器的地址。OP您能提供一些您实际想要实现的背景信息吗?我尝试使用GitLab自动将其部署到k8s。GitLab的开发人员要求我更改代码以支持此功能:这是原始的requ