You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在IIS托管的ASP.NET(NET6)Program.cs中获取站点端口

获取IIS托管的.NET6 ASP.NET应用运行端口的方法

针对IIS托管的.NET6 ASP.NET应用,在Program.cs中获取运行端口有两种常用方案,根据你的需求选择:

方案一:获取当前请求的外部访问端口(推荐)

如果需要获取用户实际访问的端口(比如http://test.com:7535中的7535),可以通过IHttpContextAccessor读取当前请求的Host信息,这是最准确的方式——毕竟IIS可能绑定多个端口,不同请求可能来自不同端口。

实现步骤:

  1. 注册IHttpContextAccessor服务
  2. 在中间件或业务逻辑中注入并获取端口
var builder = WebApplication.CreateBuilder(args);

// 注册HttpContext访问服务
builder.Services.AddHttpContextAccessor();

var app = builder.Build();

// 示例:在中间件中获取端口并打印
app.Use(async (context, next) =>
{
    var port = context.Request.Host.Port;
    if (port.HasValue)
    {
        app.Logger.LogInformation("当前请求的访问端口:{Port}", port.Value);
        // 这里可以将端口存入变量或用于业务逻辑
    }
    else
    {
        // 若端口为null,说明使用的是默认端口(80/http或443/https)
        var defaultPort = context.Request.IsHttps ? 443 : 80;
        app.Logger.LogInformation("当前请求使用默认端口:{Port}", defaultPort);
    }
    await next();
});

app.MapGet("/", () => "Hello World!");

app.Run();

方案二:启动时获取应用绑定的内部端口

如果需要在应用启动阶段就获取绑定的端口(注:IIS托管下这里获取的是应用内部的监听端口,而非外部用户访问的端口),可以通过IServerAddressesFeature实现:

var builder = WebApplication.CreateBuilder(args);

var app = builder.Build();

// 获取服务器地址特性,读取绑定的端口
var serverAddressesFeature = app.Services.GetRequiredService<IServerAddressesFeature>();
foreach (var address in serverAddressesFeature.Addresses)
{
    var uri = new Uri(address);
    if (uri.Port > 0)
    {
        app.Logger.LogInformation("应用内部绑定的端口:{Port}", uri.Port);
    }
}

app.MapGet("/", () => "Hello World!");

app.Run();

注意事项:

  • IIS托管模式下,应用内部绑定的端口通常是IIS分配的随机端口(比如localhost:5000),和外部用户访问的端口(比如7535)不一致,所以如果需要外部访问端口,优先用方案一。

内容的提问来源于stack exchange,提问作者nicetomitja

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 09:43:11