我正在 .NET 6 中开发一个 Windows 服务。该服务托管一个 Web API。
在 UAT 和 PROD 环境中,此 Web API 将使用 HTTPS 公开。在我的计算机上,它将使用 HTTP 公开。
我正在使用 XL Deploy 在 UAT 和 PROD 中部署我的应用程序。 XL Deploy 在部署时正在替换我的
appsettings
文件中的令牌。
这里是
appsettings.json
文件中的 Kestrel 部分:
"Kestrel": {
"Endpoints": {
"HttpsInlineCertStore": {
"Url": "{{API_URL}}",
"Certificate": {
"Subject": "{{CERTIFICATE_SUBJECT}}",
"Store": "My",
"Location": "LocalMachine",
"AllowInvalid": "false"
}
}
}
},
这里是
appsettings.Local.json
文件中的 Kestrel 部分:
"Kestrel": {
"Endpoints": {
"Http": {
"Url": http://localhost:9200
}
}
},
当我在本地运行此应用程序时,出现错误:
无效网址:“{API_URL}”
System.FormatException:无效的网址:“{{API_URL}}”
当我在我的
program.cs
中观看配置实例时,我看到:
我们可以看到配置正在
appsettings.json
文件中寻找 Kestrel。
我不明白为什么。我预计 Kestrel 部分会被完全覆盖。
我有另一个非常相似的 Windows 服务,以同样的方式托管 Web API,但我没有这个问题。
我对配置文件覆盖的工作原理有疑问吗?如果是这样,如何在一种情况下获取 Http 节点,在另一种情况下获取
HttpsInLineCertStore
节点?
任何帮助将不胜感激
谢谢
您缺少
""
网址。修改一下再测试一下。
"Kestrel": {
"Endpoints": {
"Http": {
"Url": "http://localhost:9200"
}
}
}