我有一个ASP.NET Core 2.0应用程序,我打算作为一个独立的应用程序运行.应用程序应启动并绑定到可用端口.为此,我将WebHostBuilder配置为侦听" http://127.0.0.1:0 "并使用Kestrel服务器.一旦web主机开始监听,我想用文件中的实际端口保存url.我想尽早做到这一点,因为另一个应用程序将读取文件以与我的应用程序进行交互.
如何确定Web主机正在侦听的端口?
我正在使用ASP.NET Core空(web)模板编写一个简单的ASP.NET Core服务。
默认情况下,它绑定到端口5000,但我希望它绑定到系统上的随机可用端口。
我可以通过修改BuildWebHost为:
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseUrls("http://*:0") // This enables binding to random port
.Build();
Run Code Online (Sandbox Code Playgroud)
它绑定到随机端口,但是如何从应用程序中确定我正在侦听哪个端口?
.NET 6 中的“托管”机制已发生变化。以前IWebHost有IWebHost.ServerFeatures可用于获取IServerAddressFeature类似内容的属性(来自此 SO 答案):
IWebHost host = new WebHostBuilder()
.UseStartup<Startup>()
.UseUrls("http://*:0") // This enables binding to random port
.Build();
host.Start();
foreach(var address in host.ServerFeatures.Get<IServerAddressesFeature>().Addresses) {
var uri = new Uri(address);
var port = uri.Port;
Console.WriteLine($"Bound to port: {port}");
}
Run Code Online (Sandbox Code Playgroud)
现在在 .NET 6 中我有一个IHost. 如何获取端口(与 一致???):
public class Program {
public static void Main(string[] args) {
IHostBuilder hostBuilder = Host.CreateDefaultBuilder(args);
hostBuilder.ConfigureWebHostDefaults(webHostBuilder …Run Code Online (Sandbox Code Playgroud)