iis 如何规避Angular 应用程序的.NET 6 SPA代理?

mspsb9vt  于 2022-11-12  发布在  Angular
关注(0)|答案(1)|浏览(208)

编辑:我用有效的证书通过IIS运行了这个程序,但是我还没有找到一种方法来抛弃新的代理方法。如果你想了解一些关于使用IIS而不是IIS Express的信息,请跳到最后。
简而言之:使用最新的ASP.NET 6Angular模板(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: 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"
            }
        }
    }
}
  • 在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,一切都应该很清楚了。

xpcnnkqh

xpcnnkqh1#

我所做的是将以下代码添加到我的package.json中,这样我就可以手动启动Angular,而不需要在每次服务器端更改时重新启动。

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

7186更改为运行.Net 6服务器的端口(在您的示例中为443)。然后运行“npm run dev”,等待它加载并启动后端服务器。

相关问题