如何在ConfigureServices ASP NET CORE 2.1中获取主机和端口值

时间:2018-06-27 09:33:31

标签: .net asp.net-core-2.1

我需要从public void ConfigureServices(IServiceCollection services)动态获取主机(包括方案)和端口的值。我试图通过IServerAddressesFeature来执行此操作,但是当我尝试解决该问题时,IoC返回了null(到目前为止尚未注册)。因此,还有其他选择可获取此信息吗?

2 个答案:

答案 0 :(得分:1)

ConfigureServices(IServiceCollection services)方法旨在按照Microsoft documentation中的说明配置应用程序的服务。

在此似乎无法直接从WebHost检索方案,主机和端口信息。 实际上,您通常在WebHost中创建Program.cs

var webHost = WebHost.CreateDefaultBuilder(args) // initialise web host
            .UseStartup<Startup>()
            .Build();

但是,您可以通过查看WebHost所使用的相同配置来检索CreateDefaultBuilder()使用的方案,主机和端口。

实际上,查看WebHost code,您可以看到CreateDefaultBuilder()appsettings.jsonappsettings.Development.json加载配置以配置WebHost,例如方案,主机和端口。您很可能会在ConfigureServices(IServiceCollection services)中查看相同的配置数据并扣除相同的配置信息。

如果您以Asp.Net Core 2.1为目标,则可以直接在appsettings.json文件中configure your endpoints。通过查看ConfigureServices(IServiceCollection services)中的Configuration属性,可以在Startup.cs中进行相同的操作。

您的Startup.cs可能如下所示:

public class Startup {

    public Startup(IConfiguration configuration) {

        Configuration = configuration;

    }

    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services) {

        // get http url
        var httpEndpoint = Configuration["Kestrel:Endpoints:Http:Url"];

        // get https url
        var httpsEndpoint = Configuration["Kestrel:Endpoints:Https:Url"];

        /*
         * Use IConfiguration to retrieve information
         * about loaded configuration.
        */

        // Add framework services.
        services.AddMvc();

    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env) {

        if (env.IsDevelopment()) {
            app.UseDeveloperExceptionPage();
        }

        app.UseMvc();

    }

}

请查看IConfiguration Microsoft documentation page,以获取有关可用于读取配置数据的方法的更多信息。

答案 1 :(得分:0)

我需要访问在Kestrel中托管的Service Fabric无状态应用程序的ConfigureServices内部的端口。

一种方法(ref)是将要在Startup中执行的操作放入在Programs.cs中构建WebHost的位置(在我的情况下是Service Fabric StatelessService的CreateServiceInstanceListeners)

这是我正在研究的内容的一个片段:

php_1     | [20-Jul-2018 19:06:27] WARNING: [pool www] child 5 said into stderr: "NOTICE: PHP message: PHP Fatal error:  SOAP-ERROR: Parsing WSDL: Couldn't load from 'host.docker.internal:56000/serviceName.svc?wsdl' : failed to load external entity "host.docker.internal:56000/serviceName.svc?wsdl""