Как получить значение хоста и порта в ConfigureServices ASP NET CORE 2.1 - PullRequest
0 голосов
/ 27 июня 2018

Мне нужно динамически получить значение хоста (включая схему) и порта от public void ConfigureServices(IServiceCollection services). Я пытался сделать это через IServerAddressesFeature, но когда я попытался разрешить его, IoC возвратил ноль (пока он не зарегистрирован). Итак, есть ли другой способ получить эту информацию?

Ответы [ 2 ]

0 голосов
/ 21 июля 2018

Мне нужно было получить доступ к порту внутри ConfigureServices для приложения без учета состояния Service Fabric, размещенного в Kestrel.

Один из подходов ( ref ) состоит в том, чтобы поместить то, что вы собирались сделать в своем автозагрузке, в место, где вы строите свой WebHost, в Programs.cs (в моем случае CreateServiceInstanceListeners моей Service Fabric StatelessService)

Это фрагмент из того, над чем я работал:

                    var endpoint = Context.CodePackageActivationContext.GetEndpoint("ServiceEndpoint");
                    return new WebHostBuilder()
                        .UseKestrel(/* SSL STUFF GOES HERE */)
                        .ConfigureServices(
                            services => services
                                .AddSingleton<StatelessServiceContext>(serviceContext)
                                .AddMvc(options =>
                                {
                                    // Using the port here:
                                    options.SslPort = endpoint.Port;
                                    options.Filters.Add(new RequireHttpsAttribute());
                                }))                                   
                        .UseStartup<Startup>()
                        .UseServiceFabricIntegration(listener, ServiceFabricIntegrationOptions.None)
                        .UseUrls(url)
                        .Build();
                }))
0 голосов
/ 02 июля 2018

Метод ConfigureServices(IServiceCollection services) предназначен для настройки служб вашего приложения, как описано в документации Microsoft .

Там, кажется, вы не можете получить информацию о схеме, хосте и порте непосредственно из WebHost. Действительно, вы обычно создаете свой WebHost в Program.cs:

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

Однако вы можете получить схему, хост и порт, используемые WebHost, взглянув на ту же конфигурацию, которую CreateDefaultBuilder() использует для этого.

Действительно, глядя на код WebHost , вы можете увидеть CreateDefaultBuilder() загружает конфигурацию из appsettings.json и appsettings.Development.json для настройки WebHost, как например схема, хост и порт. Вы можете очень хорошо посмотреть на те же данные конфигурации в ConfigureServices(IServiceCollection services) и вывести ту же информацию о конфигурации.

Если вы нацелены на Asp.Net Core 2.1, вы можете настроить свои конечные точки в appsettings.json файле напрямую. Вы можете сделать то же самое в вашем 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 для получения дополнительной информации о том, какие методы вы можете использовать для чтения данных конфигурации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...