我需要从public void ConfigureServices(IServiceCollection services)
动态获取主机(包括方案)和端口值。我试图通过IServerAddressesFeature
来解决这个问题,但是当我试图解决这个问题时,IoC返回了null (到目前为止它还没有注册)。那么,有没有其他选择来获取这些信息呢?
发布于 2018-07-02 06:42:14
ConfigureServices(IServiceCollection services)
方法用于按照Microsoft documentation中的说明配置应用程序的服务。
在那里,您似乎不能直接从WebHost
检索方案、主机和端口信息。实际上,您通常会在Program.cs
中创建WebHost
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 Core2.1,你可以直接在appsettings.json
文件中输入configure your endpoints。您可以通过查看Startup.cs
中的Configuration
属性在ConfigureServices(IServiceCollection services)
中执行相同的操作。
您的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,了解有关可用于读取配置数据的方法的更多信息。
发布于 2018-07-21 05:16:30
我需要访问ConfigureServices内部的端口,用于托管在Kestrel中的Service Fabric无状态应用程序。
一种方法(ref)是将您在启动时要做的事情放在Programs.cs (在我的例子中是服务Fabric StatelessService的CreateServiceInstanceListeners )中,放在构建WebHost的地方。
这是我正在做的工作的一个片段:
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();
}))
https://stackoverflow.com/questions/51059263
复制相似问题