我需要从 public void ConfigureServices(IServiceCollection services)
动态获取主机(包括协议)和端口的值。我试图通过IServerAddressesFeature
来实现,但是当我尝试解决它时,IoC返回了null(到目前为止还没有注册)。那么,是否有其他选项可以获取这些信息?
我需要从 public void ConfigureServices(IServiceCollection services)
动态获取主机(包括协议)和端口的值。我试图通过IServerAddressesFeature
来实现,但是当我尝试解决它时,IoC返回了null(到目前为止还没有注册)。那么,是否有其他选项可以获取这些信息?
ConfigureServices(IServiceCollection services)
方法旨在配置应用程序的服务,如 Microsoft 文档 中所述。WebHost
中获取方案、主机和端口信息。
实际上,通常是在 Program.cs
中创建 WebHost
:var webHost = WebHost.CreateDefaultBuilder(args) // initialise web host
.UseStartup<Startup>()
.Build();
然而,您可以通过查看CreateDefaultBuilder()
使用的配置来检索WebHost
使用的方案、主机和端口。
实际上,查看WebHost
代码,您可以看到CreateDefaultBuilder()
从appsettings.json
和appsettings.Development.json
中加载配置以配置WebHost
,例如方案、主机和端口。您可以在ConfigureServices(IServiceCollection services)
中查看相同的配置数据,并推断出相同的配置信息。
如果您的目标是Asp.Net Core 2.1,则可以直接在appsettings.json
文件中配置您的终结点。您可以通过查看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文档页面,了解更多读取配置数据的方法。http
和https
变量仍将为空。 httpEndpoint
和httpsEndpoint
。你是说还有另一种方法被首先调用,还是说需要设置一个硬编码的appsettings.json文件? - Tom StickelIServer
并通过它访问。请参阅 https://dev59.com/NVYO5IYBdhLWcg3wIuTp#60791568。 - James Durda我需要在Kestrel中托管的Service Fabric无状态应用程序的ConfigureServices内访问端口。
一种方法(ref)是将要在Startup中执行的操作放入到构建WebHost的位置,即Programs.cs中(在我的情况下是Service Fabric StatelessService的CreateServiceInstanceListeners)
以下是我正在处理的代码片段:
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();
}))
ConfigureServices(IServiceCollection)
中,为什么需要使用Web主机的Scheme、Host和Port? - smn.tino