HostBuilder和IWebHostBuilder都包含UseUrls方法,它是以分号分隔的 IP 地址或主机地址列表,其中包含服务器应侦听请求的端口和协议。通过使用这种方法,我们可以设置服务器应该监听请求的 URL,
此外,当我们配置 Asp.net 核心应用程序使用 Server(例如 Http.sys 或 Kestrel)时,在服务器选项中,我们还可以设置服务器应该监听请求的 URL,例如使用HttpSysOptions。 UrlPrefixes 属性或KestrelServerOptions.Listen() 方法。
然后,使用该PreferHostingUrls
属性,我们可以指示主机是否应该侦听 IWebHostBuilder 上配置的 URL 或 IServer 上配置的 URL。
示例代码如下:
public static IWebHostBuilder CreateWebHostBuilder(string[] args)
{
var config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("hostsettings.json", optional: true)
.AddCommandLine(args)
.Build();
return WebHost.CreateDefaultBuilder(args)
.UseUrls("http://*:5000")
.UseConfiguration(config)
.UseHttpSys(serveroptions =>
{
serveroptions.Authentication.Schemes = Microsoft.AspNetCore.Server.HttpSys.AuthenticationSchemes.None;
serveroptions.Authentication.AllowAnonymous = true;
serveroptions.MaxConnections = 100;
serveroptions.MaxRequestBodySize = 30000000;
serveroptions.UrlPrefixes.Add("http://localhost:5001");
})
//.ConfigureKestrel(serverOptions =>
//{
// serverOptions.Limits.MaxConcurrentConnections = 100;
// serverOptions.Limits.MaxConcurrentUpgradedConnections = 100;
// serverOptions.Limits.MaxRequestBodySize = 10 * 1024;
// serverOptions.Limits.MinRequestBodyDataRate =
// new MinDataRate(bytesPerSecond: 100,
// gracePeriod: TimeSpan.FromSeconds(10));
// serverOptions.Limits.MinResponseDataRate =
// new MinDataRate(bytesPerSecond: 100,
// gracePeriod: TimeSpan.FromSeconds(10));
// serverOptions.Listen(IPAddress.Loopback, 5001);
// serverOptions.Limits.KeepAliveTimeout =
// TimeSpan.FromMinutes(2);
// serverOptions.Limits.RequestHeadersTimeout =
// TimeSpan.FromMinutes(1);
//})
.PreferHostingUrls(false)
.Configure(app =>
{
app.Run(context =>
context.Response.WriteAsync("Hello, World!"));
});
}
如果PreferHostingUrls
是false
,则监听5001端口:
如果PreferHostingUrls
是true
,它将监听5000端口:
参考:
如何使用 HTTP.sys
ASP.NET Core Web 主机:主机配置值