编辑:我用有效的证书通过IIS
运行了这个程序,但是我还没有找到一种方法来抛弃新的代理方法。如果你想了解一些关于使用IIS
而不是IIS Express
的信息,请跳到最后。
简而言之:使用最新的ASP.NET 6
和Angular
模板(Visual Studio 2022),如何绕过反向代理,转而使用与以前版本的.NET相同的方法?我不想通过SPA URL运行应用程序,后端请求被转发到SPA代理。
详细地说,我的目标是:
- 无IIS Express
- 通过终端手动启动Angular服务器。
- 将ASP.NET应用程序配置为连接到Angular服务器,而不是启动它自己的示例,
- 让ASP.NET应用程序从IIS 10的本地示例运行,并使用自签名证书。
- 根据需要将调试器附加到w3 wp。
我想导航到https://mydomain.local,让它提供一切服务,这在.NET 6之前是没有问题的。您可以使用UseProxyToSpaDevelopmentServer
,运行npm start
,一切都很好。
虽然我知道你仍然可以使用它,.NET 6沟Startup.cs
,和指导方针建议使用精简的Program.cs
前进。
我试过:
- 删除预启动脚本(
aspnetcore-https.js
) - 通过从
angular.json
中删除proxyConfig属性来删除代理配置(proxy.conf.js
) - 创建IIS启动配置文件并使用设置
- 更改.csproj文件中的SPA配置值。
- 删除package.json中的--ssl标志(ssl、ssl-cert和ssl-key)
- 在
angular.json
中定义非默认主机 - 上述物质的组合
似乎没有什么工作,文档也不太好。
此刻:
- 我有一个有效的自签名证书(使用mkcert创建)
- 我的域在主机文件中设置
- 在IIS中安装应用程序,我可以加载它,并使用有效的证书。
- 加载时,它会在csproj文件中查找由
SpaProxyServerUrl
属性定义的值 - Angular运行后,将重定向到https://locolhost:xxxxx,但如果证书永远无效,则我希望从https://mydomain.local提供页面
任何帮助都将不胜感激。
更新
我不确定自签名的ASP.NET证书有什么问题。我只是删除了它的所有引用,然后重新添加了它们。
- 从
%AppData%\Roaming\ASP.NET\https
移除凭证 - 通过Internet选项清除SSL缓存(运行命令:不完整的
- 通过
chrome://net-internals/#hsts
清除域的任何安全策略 - 清除Chrome浏览器历史记录(站点设置、缓存数据等)
- 从Windows证书存储区中删除证书(
run command: mmc
File --> Add/Remove Snap-In --> Certificates
)。删除个人证书和受信任的根证书 - 通过在VS中生成项目或运行
dotnet dev-certs https --trust
,再次生成证书
要退出IIS Express并在普通IIS示例上回复,请执行以下操作:
- 将应用程序正常添加到IIS。
- 创建一个
https
绑定,我建议使用mkcert
来创建一个有效的自签名证书。 - 确保https端口与
launchSettings.json
中定义的端口匹配 - 更新
launchSettings.json
,随意删除任何不需要的配置文件。您需要类似于以下的配置文件:
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iis": {
"applicationUrl": "https://yourdomain.local",
"sslPort": 443
}
},
"profiles": {
"IIS": {
"commandName": "IIS",
"launchBrowser": true,
"launchUrl": "https://yourdomain.local",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development",
"ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "Microsoft.AspNetCore.SpaProxy"
}
}
}
}
- 在ClientApp文件夹中添加一个新的proxy-conf文件(我称之为我的proxy-iis.conf),或者更新现有文件。如果创建了一个新文件,请确保更新angular.json以相应地引用它。
const PROXY_CONFIG = [
{
context: [
"/yourRoute",
],
target: "https://yourdomain.local:443",
secure: false,
changeOrigin: true,
logLevel: "info",
headers: {
Connection: 'Keep-Alive'
}
}
]
module.exports = PROXY_CONFIG;
- 检查您的
.csproj
文件,确保在<SpaProxyServerUrl></SpaProxyServerUrl>
中定义的端口与angular.json
中使用的端口匹配
手动启动Angular应用程序,访问https://yourdomain.local
,一切都应该很清楚了。
1条答案
按热度按时间xpcnnkqh1#
我所做的是将以下代码添加到我的package.json中,这样我就可以手动启动Angular,而不需要在每次服务器端更改时重新启动。
将
7186
更改为运行.Net 6服务器的端口(在您的示例中为443)。然后运行“npm run dev”,等待它加载并启动后端服务器。