【问题标题】:how to determine programmatically what port asp.net core is running on如何以编程方式确定运行 asp.net 核心的端口
【发布时间】:2019-10-16 19:02:21
【问题描述】:

ASP.net 核心可以在任意数量的端口上运行,有时应用程序可能通过命令行运行,将传递的端口作为参数,有时在 docker 中它运行在80 如果配置文件Released 被指定,我们怎么能以编程方式确定 asp.net 实际在哪个端口上运行?

建议的answer 不是答案,因为这需要访问上下文,假设Startup 我需要访问此值?

launchSettings.json

"Customer": {
  "commandName": "Project",
  "launchBrowser": false,
  "applicationUrl": "https://localhost:5007;http://localhost:5006",
  "environmentVariables": {
    "ASPNETCORE_ENVIRONMENT": "Development",
  }

例如,在下面的代码中

public static void Main(string[] args)
{
    CreateWebHostBuilder(args).Build().Run();
}

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
        .UseStartup<Service>();

或系统启动过程中的任何地方。

【问题讨论】:

    标签: asp.net-core


    【解决方案1】:

    您可以尝试从ServerAddressesFeature 获取端口:

    public void Configure(IApplicationBuilder app, ILogger<Startup> logger)
    {
        var serverAddressesFeature = app.ServerFeatures.Get<IServerAddressesFeature>();
        var address = serverAddressesFeature.Addresses.First();
        int port = int.Parse(address.Split(':').Last());
    
    
        logger.LogInformation("Listening on the following addresses: " + string.Join(", ", port.ToString()));
    }
    

    作为https://github.com/aspnet/Hosting/issues/811

    这不适用于 IIS 或 IIS Express。 IIS 作为反向代理运行。它为您的进程选择一个随机端口来侦听,并且不会将公共地址信息流向您。获取公共地址信息的唯一方法是通过传入的请求。

    【讨论】:

    • 谢谢,真棒。 +1 为 IIS 打嗝,问题,string.Join(", " 有必要吗?
    • 还有一种方法可以检查您是否正在运行 IIS 或 IIS Express 作为保护,所以我可以恢复到默认端口。
    • string.Join(", " 不是必须的。第二个问题你可以看看这个回复:stackoverflow.com/questions/55852820/…
    猜你喜欢
    • 2017-05-01
    • 2013-06-07
    • 1970-01-01
    • 2016-07-07
    • 1970-01-01
    • 2011-08-11
    • 1970-01-01
    • 2016-12-09
    相关资源
    最近更新 更多