【问题标题】:How to circumvent the .NET 6 SPA proxy for Angular applications?如何规避 Angular 应用程序的 .NET 6 SPA 代理?
【发布时间】:2022-07-28 09:13:24
【问题描述】:

编辑:我设法使用有效证书通过IIS 运行它,但我还没有找到放弃新代理方法的方法。如果您想了解有关使用 IIS 而不是 IIS Express 的信息,请跳至结尾。

简而言之:使用最新的 ASP.NET 6Angular 模板 (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


【解决方案1】:

我希望我能很好地理解你想要做什么。我所做的就是我可以手动启动 angular 并且不需要在每个服务器端重新启动更改是将以下内容添加到我的 package.json 中。

{
...
"scripts": {
   "dev": "set ASPNETCORE_HTTPS_PORT=7186 && npm start"
 }  
...

}

将“7186”更改为所需的端口。在您的情况下为 80 或 443。然后运行“npm run dev”等待它加载并启动后端服务器。

希望这对未来有所帮助。

【讨论】:

    猜你喜欢
    • 2022-11-28
    • 2019-02-13
    • 2020-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-07
    • 2018-10-26
    • 1970-01-01
    • 2019-03-01
    相关资源
    最近更新 更多