【发布时间】:2017-10-07 08:47:38
【问题描述】:
我希望能够使用自定义域和 ssl 而不是 localhost 在本地进行开发。
如何在 VS 解决方案中设置自定义域 + ssl 而不是 localhost?
【问题讨论】:
标签: asp.net-core asp.net-core-mvc asp.net-core-2.0
我希望能够使用自定义域和 ssl 而不是 localhost 在本地进行开发。
如何在 VS 解决方案中设置自定义域 + ssl 而不是 localhost?
【问题讨论】:
标签: asp.net-core asp.net-core-mvc asp.net-core-2.0
如果您想关联您的服务器以使用分配给服务器/网络主机的所有 IP 地址,那么您可以这样做:
var host = new WebHostBuilder()
.UseUrls("http://*:80", "http://localhost")
.UseKestrel()
.UseIISIntegration()
.Build();
注意:如果您不想要所有 IP 地址,则可以从 http://* 更改为特定的 IP 地址,例如 http://111.111.111.111。此外,端口不是必需的,但我已经使用它来完成答案。 还需要注意的是,SSL 不适用于 UseUrls
您可以在 Microsoft 官方文档中找到有关服务器 URL here 的大量其他详细信息。
请注意,不建议通过 Kestrel(即使使用 SSL)托管在 public 端点上,您应该使用 Nginx 或 IIS 等反向代理。您可以从official Microsoft Docs here 了解更多信息。
您没有提到您是否使用 Kestrel,但我假设您是...在这种情况下,您可以通过使用选项绑定套接字轻松配置 SSL 证书。
下面是使用Listen 方法使用TCP 套接字的示例:
public static void Main(string[] args)
{
BuildWebHost(args).Run();
}
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseKestrel(options =>
{
options.Listen(IPAddress.Loopback, 5000);
options.Listen(IPAddress.Loopback, 5001, listenOptions =>
{
listenOptions.UseHttps("testCert.pfx", "testPassword");
});
})
.UseIISIntegration() // <-- don't forget you will need this for IIS!
.Build();
注意:如果您同时使用Listen 方法和UseUrls,Listen 端点会覆盖UseUrls 端点。
您可以在官方 Microsoft Docs 中找到更多信息 here。
使用图形用户界面
您可以右键单击该项目,然后单击[Properties]。
使用 launchSettings.json。
您必须使用 launchSettings.json 进行配置,您可以在此处找到:
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:61471/",
"sslPort": 44360
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"launchUrl": "https://localhost:44360",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
如果您使用 IIS,则 IIS 的 URL 绑定会覆盖您通过调用 Listen 或 UseUrls 设置的任何绑定。如需更多信息,请参阅Introduction to ASP.NET Core Module。
【讨论】:
launchSettings.json 是一个错误吗?无论如何,得到您的意见总是很高兴。
.vs/config/applicationhost.config 保持同步。仅更改 launchsettings.json 中的端口(至少在过去)导致仅更改了启动 url,但应用程序仍在旧端口上运行,因为 applicationhost.config 未更新。通过 UI 执行此操作会在过去更新这两个文件。
对于 .net 核心,设置自定义域:
将域添加到主机文件,例如www.yourapp.local
找到解决方案 /.vs/applicationhost.config 添加绑定例如:
在 web 项目属性 > 调试中将 App Url 添加到“http://www.yourapp.local:51791/”
(根据需要替换端口号)
对于 SSL,我假设您可以将上述绑定和设置设置为 https,并在 Web 应用程序属性 > 调试中勾选“启用 SSL”复选框。
【讨论】:
如果您对浏览器(或您使用的任何客户端)中的证书验证错误感到满意,您可以在 hosts 文件中添加一个条目:
www.yourcustomdomain.com 127.0.0.1(或::1,如果您使用的是 IPv6)
然后使用自定义域在本地访问您的网站。
在 Windows 中,hosts 文件通常位于 C:\Windows\System32\drivers\etc。
【讨论】:
首先,在客户端的C:\Windows\System32\drivers\etc\hosts 文本文件中添加一个条目。按照hosts 文件本身中的说明进行操作。
“本地开发”是指在本地机器上还是本地网络上?如果是后者,您必须完成以下任务(按任意顺序)。
localhost URL,如here 和here 所述。我不确定,但要让它与 IIS Express 一起使用,您可能还需要运行 netsh http add urlacl,如 here 和 here 所述。
上面的一些链接是特定于 IIS Express 的,因为这是您所询问的。如果使用 Kestrel,则将上述任务更改如下。
要在服务器上配置您的证书,请将其添加到appsettings.json:
"Kestrel": {
"Certificates": {
"Default": {
"Subject": "api.mycustomdomain.com",
"Store": "My",
"AllowInvalid": true
}
}
}
要将您的 Web API 绑定到非localhost URL,在launchSettings.json 的Kestrel 配置文件中,将applicationUrl 值的localhost 部分替换为0.0.0.0。
【讨论】: