【发布时间】:2022-07-28 09:13:24
【问题描述】:
编辑:我设法使用有效证书通过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 的本地实例运行。
- 根据需要将调试器附加到 w3wp。
我想导航到 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 创建)
- 我的域是在 hosts 文件中设置的
- IIS 中的应用程序设置,我可以使用有效证书加载它。
- 加载时,它会在 csproj 文件中查找由
SpaProxyServerUrl属性定义的值 - Angular 运行后重定向到 https://locaolhost:xxxxx,但证书如果永远无效,我希望从https://mydomain.local 提供页面
任何帮助将不胜感激。
更新
我不确定自签名 ASP.NET 证书出了什么问题。我只是删除了它的所有引用并再次添加它们。
- 从
%AppData%\Roaming\ASP.NET\https中删除证书 - 通过 Internet 选项清除 SSL 缓存(运行命令:inetcpl.cpl)
- 通过
chrome://net-internals/#hsts清除域的所有安全策略 - 清除 Chrome 历史记录(网站设置、缓存数据等。
chrome://settings/clearBrowserData) - 从 Windows 证书存储 (
run command: mmcFile --> 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"
}
}
}
}
- 将一个新的 proxy-conf 文件(我称为 proxy-iis.conf)添加到您的 ClientApp 文件夹,或更新现有的。如果您创建一个新的,请确保更新 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,一切都应该是精明的。
【问题讨论】:
-
根据您的描述很难重现您的问题,建议您通过support.microsoft.com开箱。
-
谢谢@samwu。我想我的问题过于复杂了。我已经编辑并添加了一个简短/简化的版本。
-
是否应该将您的更新部分移至答案?
-
如果您想保留新的 ASP.NET Core 6 方法,但允许直通 URL:stackoverflow.com/questions/72492121/…
标签: asp.net angular visual-studio iis