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

如何在Blazor WebAssembly服务端获取Host与Port属性?

在Blazor WebAssembly服务端Startup.cs中自动获取Host和Port

当然可以在服务端的Startup.cs里实现自动获取Host和Port的需求,根据服务端的运行场景,有几种实用的实现方式:

方案1:通过服务器地址特性获取Kestrel监听地址

在Startup.cs的Configure方法中,你可以通过IServerAddressesFeature直接拿到Kestrel实际绑定的监听地址,不管是本地调试、Azure部署还是Docker容器,只要服务器正确启动就能获取到:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    var serverAddresses = app.ServerFeatures.Get<IServerAddressesFeature>();
    
    if (serverAddresses != null)
    {
        foreach (var address in serverAddresses.Addresses)
        {
            var uri = new Uri(address);
            string host = uri.Host;
            int port = uri.Port;
            // 可将host和port存入全局变量、配置类,供后续逻辑调用
        }
    }

    // 其他中间件配置逻辑...
}

方案2:通过HttpContext获取用户实际访问的Host和Port

如果你的需求是在处理请求时获取用户实际访问的地址(比如经过反向代理后的外部地址),可以在中间件或控制器中通过HttpContext.Request.Host获取:

// 示例:在自定义中间件中获取
app.Use(async (context, next) =>
{
    string host = context.Request.Host.Host;
    int port = context.Request.Host.Port ?? 80; // 无端口时默认用80
    // 在这里使用host和port
    await next();
});

注意:这种方式只能在有请求上下文的阶段使用,ConfigureServices阶段还没有HttpContext,无法用这个方法。

场景适配提示

  • Azure App Service部署时:IServerAddressesFeature拿到的是Kestrel内部监听的端口,而HttpContext.Request.Host会返回用户实际访问的域名和端口,按需选择即可。
  • Docker容器部署时:如果用了端口映射,IServerAddressesFeature拿到的是容器内部端口,若要获取宿主机的外部访问端口,要么在启动容器时通过环境变量传递,要么在请求上下文里用HttpContext.Request.Host获取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 11:37:00