PocKestrelAutoPort.cs 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. using System.Net;
  2. using Microsoft.AspNetCore.Hosting.Server;
  3. public class PocKestrelAutoPort
  4. {
  5. public static async Task RunPoc()
  6. {
  7. var host = Host.CreateDefaultBuilder()
  8. .ConfigureWebHostDefaults(webBuilder =>
  9. {
  10. webBuilder.ConfigureKestrel(serverOptions =>
  11. {
  12. serverOptions.Listen(IPAddress.Parse("127.0.0.1"), 0); // 使用端口 0,让系统自动分配端口
  13. });
  14. webBuilder.Configure(app =>
  15. {
  16. app.Run(async context =>
  17. {
  18. await context.Response.WriteAsync("Hello, world!");
  19. });
  20. });
  21. })
  22. .Build();
  23. // 启动后获取实际端口
  24. host.Start();
  25. var addressFeature = host.Services.GetRequiredService<IServer>().Features
  26. .Get<Microsoft.AspNetCore.Hosting.Server.Features.IServerAddressesFeature>();
  27. var boundAddress = addressFeature.Addresses.FirstOrDefault();
  28. System.Console.WriteLine($"Server bound to: {boundAddress}");
  29. await host.WaitForShutdownAsync();
  30. }
  31. }