asp.net-core - 如何以编程方式确定运行 asp.net 核心的端口
问题描述
ASP.net 核心可以在任意数量的端口上运行,有时应用程序可能通过命令行运行,将传递的端口作为参数,有时在 docker 中运行,80
如果Released
指定了配置文件,我们如何以编程方式确定 asp.net 的实际端口继续运行?
建议的答案不是答案,因为这需要访问上下文,假设Startup
我需要访问此值?
启动设置.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>();
或系统启动过程中的任何地方。
解决方案
您可以尝试从以下位置获取端口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 作为反向代理运行。它为您的进程选择一个随机端口来侦听,并且不会将公共地址信息流向您。获取公共地址信息的唯一方法是通过传入请求。
推荐阅读
- java - Spring如何连接MongoDB?
- apache-spark - Spark kubernetes java.io.InvalidClassException:org.apache.spark.scheduler.cluster.CoarseGrainedClusterMessages$RetrieveSparkAppConfig$
- django - 未找到带有参数“(”,)”的“详细信息”的反向。尝试了 1 种模式:['users/(?P
[^/]+)/$'] - python - “径向高速公路的可达性指数”会被视为离散的数字数据还是有序的分类数据?
- python - datetime.now() - date.now() 返回 -1 天
- java - Java中的两人井字游戏-如何防止非整数输入
- python - Python 并发 - CAN 总线
- excel - Excel 的删除列宏可以逐步执行,但在分配给“按钮”形状时不会
- r - 遍历数据框中的行并应用函数
- windows - 安装 cakephp/acl 时发生冲突