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

.NET Core 3.1如何在Startup类ConfigureService方法中读取应用URL

解决方案

ASP.NET Core中ConfigureServices执行阶段Web服务器还未完成启动,因此无法直接拿到运行时实际绑定的URL,但可以通过以下两种方式满足需求:

方法1:读取预先配置的启动URL

应用的启动绑定URL默认来源于配置源(appsettings.json的Urls字段、ASPNETCORE_URLS环境变量、命令行参数等),你可以直接在Startup中通过IConfiguration读取:

  • 首先在Startup构造函数中注入并保存IConfiguration实例:
public class Startup
{
    public IConfiguration Configuration { get; }
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }
    // 省略其他代码
}
  • 在ConfigureServices中直接读取配置的URL:
public void ConfigureServices(IServiceCollection services)
{
    // 读取配置的启动URL,多个URL默认用分号分隔
    var configUrls = Configuration["Urls"];
    // 后续逻辑
}

注意:该方式读取的是预先配置的启动值,若你配置的是http://*:0这类动态端口规则,或者运行时端口被自动调整,该方式拿到的不是实际运行的地址

方法2:延后获取运行时实际绑定的URL

如果你需要拿到服务器启动后实际监听的URL,可以在注册服务时使用工厂模式,等服务容器构建完成、服务器启动后再获取地址:

using Microsoft.AspNetCore.Hosting.Server;
using Microsoft.AspNetCore.Hosting.Server.Features;

public void ConfigureServices(IServiceCollection services)
{
    // 示例:注册需要用到应用URL的自定义服务
    services.AddTransient<IMyCustomService>(serviceProvider =>
    {
        // 此时服务器已启动,可拿到实际监听地址
        var server = serviceProvider.GetRequiredService<IServer>();
        var addressFeature = server.Features.Get<IServerAddressesFeature>();
        var actualRunUrl = addressFeature?.Addresses.FirstOrDefault();
        return new MyCustomService(actualRunUrl);
    });
}

注意:不要在ConfigureServices执行过程中直接构建临时服务容器去解析IServer拿地址,此时服务器还未启动,地址集合为空

额外说明:如果你的应用部署在IIS、Nginx等反向代理之后,上述方式拿到的是应用内部监听的本地地址,不是公网用户访问的域名地址,公网地址需要你提前在配置中指定,或者从请求的X-Forwarded-*头中读取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 16:36:03