Kestrel 服务器使用的默认配置文件是hosting.json
. 该名称在不同的 beta 版本中多次更改。如果您现在project.json
使用以下"command"
部分
"commands": {
"web": "Microsoft.AspNet.Server.Kestrel"
}
然后在从命令行启动服务器期间
dnx web
该文件hosting.json
将被读取。文件
{
"server.urls": "http://0.0.0.0:5000"
}
将配置服务器在每个 IP4 地址上侦听 5000。配置
{
"server.urls": "http://::5000;http://0.0.0.0:5000"
}
将通知在 IP4 和 IP6 地址上侦听 5000。
ASPNET_ENV
可以通过使用环境变量或--config myconfig1.json
(或config=myconfig1.json
)的使用来指定替代配置文件。例如,您可以使用
SET ASPNET_ENV=Development
并创建hosting.Development.json
具有特定配置的文件。或者,您可以project.json
使用
"commands": {
"web": "Microsoft.AspNet.Server.Kestrel"
"webProd": "Microsoft.AspNet.Server.Kestrel --config prod.json"
}
并按使用启动服务器
dnx webProd
我还必须提醒您,可能需要您允许额外收听和注册(开始dnx web
)。由于防火墙和侦听新 TCP/HTTP 端口的本地安全性,它是必需的。像下面这样的东西应该为每个人(IPv4 和 IPv6)进行本地注册和监听 5000 端口:
netsh http add iplisten ipaddress=0.0.0.0:5000
netsh http add iplisten ipaddress=::5000
netsh http add urlacl url=http://+:5000/ user=\Everyone
为了更安全,您可以调整上述配置以授予最小权限。
更新:感谢@BlaneBunderson。可以使用 * 而不是 IP 地址(如http://*:5000
)从任何接口监听任何IP4 和 IP6 地址。一个应该小心,不要使用这些
http://*:5000;http://::5000
http://::5000;http://*:5000
http://*:5000;http://0.0.0.0:5000
http://*:5000;http://0.0.0.0:5000
因为它需要注册两次::
IP6地址或IP4地址。0.0.0.0
对应公告
从技术上讲,任何不是“localhost”或有效 IPv4 或 IPv6 地址的主机名都会导致 Kestrel 绑定到所有网络接口。
我认为这种行为将来可能会改变。因此,我建议仅使用*:5000
,0.0.0.0:5000
和::5000
表格来注册任何 IT 地址。
更新 2: ASP.NET Core RC2 更改(参见公告)加载默认值的行为。必须更改以Main
从中加载设置hosting.json
和命令行参数。下面是一个使用示例
public static void Main(string[] args)
{
var config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("hosting.json", optional: true)
.AddEnvironmentVariables(prefix: "ASPNETCORE_")
.AddCommandLine(args)
.Build();
var host = new WebHostBuilder()
.UseUrls("http://*:1000", "https://*:1234", "http://0.0.0.0:5000")
.UseEnvironment("Development")
.UseConfiguration(config)
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.Build();
host.Run();
}
上面的代码使用了三个绑定:"http://*:1000"
, "https://*:1234"
,"http://0.0.0.0:5000"
默认情况下而不是使用默认端口 5000 默认情况下(确切地说是 的用法http://localhost:5000
)。的调用.UseConfiguration(config)
是在之后进行 .UseUrls
的。因此,从或命令行加载的配置hosting.json
会覆盖默认选项。如果一个删除.SetBasePath(Directory.GetCurrentDirectory())
行,hosting.json
则将从编译应用程序 dll 的同一目录加载(例如bin\Debug\netcoreapp1.0
)。
可以使用执行
dotnet.exe run --server.urls=http://0.0.0.0:5000
覆盖默认设置(来自UseUrls
)和来自"server.urls"
属性的设置(hosting.json
如果存在)。
以同样的方式,可以通过设置环境变量来覆盖 ULR 设置
set ASPNETCORE_SERVER.URLS=http://localhost:12541/
那么应用程序的默认启动dotnet.exe run
将http://localhost:12541/
用于绑定。
您可以在此处找到使用 HTTPS 绑定的示例。
备注:环境变量的名称在 ASP.NET 的更高版本中由 更改ASPNETCORE_SERVER.URLS
为(请参阅此处的 ASP.NET Core 3.1 文档)。ASPNETCORE_URLS