首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在ConfigureServices ASP core2.1中获取主机和端口值

如何在ConfigureServices ASP core2.1中获取主机和端口值
EN

Stack Overflow用户
提问于 2018-06-27 17:33:31
回答 2查看 5.6K关注 0票数 2

我需要从public void ConfigureServices(IServiceCollection services)动态获取主机(包括方案)和端口值。我试图通过IServerAddressesFeature来解决这个问题,但是当我试图解决这个问题时,IoC返回了null (到目前为止它还没有注册)。那么,有没有其他选择来获取这些信息呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-02 06:42:14

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

在那里,您似乎不能直接从WebHost检索方案、主机和端口信息。实际上,您通常会在Program.cs中创建WebHost

代码语言:javascript
复制
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 Core2.1,你可以直接在appsettings.json文件中输入configure your endpoints。您可以通过查看Startup.cs中的Configuration属性在ConfigureServices(IServiceCollection services)中执行相同的操作。

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

代码语言:javascript
复制
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,了解有关可用于读取配置数据的方法的更多信息。

票数 2
EN

Stack Overflow用户

发布于 2018-07-21 05:16:30

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

一种方法(ref)是将您在启动时要做的事情放在Programs.cs (在我的例子中是服务Fabric StatelessService的CreateServiceInstanceListeners )中,放在构建WebHost的地方。

这是我正在做的工作的一个片段:

代码语言:javascript
复制
                    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();
                }))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51059263

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档