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