提问人:LittleTreeX 提问时间:11/11/2023 更新时间:11/15/2023 访问量:207
如何使用 Visual Studio 2022 将具有 Angular 应用的 ASP.NET 核心正确发布到 Azure
How to properly publish an ASP.NET core with Angular app to Azure using Visual Studio 2022
问:
这些是我使用的步骤:
- 我在Visual Studio中开始了一个新项目,特别是“ASP.NET Core with Angular”。
- 我严格按照本指南中的说明进行操作:https://learn.microsoft.com/en-us/aspnet/core/tutorials/publish-to-azure-webapp-using-vs?view=aspnetcore-7.0(基本上只是运行使用 Visual Studio 中的内置发布功能、创建新的 Azure Web 应用服务、设置数据库和发布项目的过程)。
使用 F5 加载时,该站点在本地工作。
但是,已发布的网站不起作用。这是因为发布功能将文件夹的内容放在 中。dist
site\wwwroot\wwwroot
如果我进入 Azure 中的路径映射配置并更改默认虚拟路径以指向站点(尽管不是默认的注册或登录身份验证功能)。/
site\wwwroot\wwwroot
身份验证问题可能只是数据库配置问题,或者它仍然是路径问题,我不确定。
但是,更大的问题是,如果我进行更改并再次发布项目,则项目将发布到其中,这意味着新的现在是.site\wwwroot\wwwroot
wwwroot
site\wwwroot\wwwroot\wwwroot
因此,我无法更改路径映射以使我的网站正常工作,而不会中断任何未来的发布。我真的不明白为什么我专门使用 Visual Studio 创建的新创建的基础项目会开箱即用。我是 Azure 和 Angular 的新手,所以也许我应该更改配置文件中的某些内容。我在网上搜索并尝试了很多不同的东西,但无济于事。所有 Web 知识看起来都与没有相同配置文件的旧版本相关。
除了这个嵌套的发布问题之外,我还想知道为什么路由可能不适用于默认注册页面。这是浏览器中的内容:我只是得到一个 404 未找到:mysite.azurewebsites.net/Identity/Account/Register?returnUrl=/authentication/login
The resource you are looking for has been removed, had its name changed, or is temporarily unavailable.
答:
嵌套发布问题
- 嵌套发布问题是由 Visual Studio 使用 Angular 应用程序发布 ASP.NET Core 的方式引起的。
- 默认情况下,Visual Studio 将 Angular 应用程序发布到 ASP.NET Core 应用程序的 wwwroot/dist 文件夹。
- 将 ASP.NET Core 应用程序发布到 Azure 时,Visual Studio 会将 wwwroot 文件夹的内容复制到 Azure Web 应用上的 site\wwwroot 文件夹。
- 这会导致将 Angular 应用程序发布到 Azure Web 应用上的 site\wwwroot\wwwroot 文件夹。
修复
- 要解决嵌套发布问题,一种方法是使用 Angular CLI 构建和发布 Angular 应用程序。为此,请按照下列步骤操作:
- 打开 Visual Studio 命令提示符。
导航到 Angular 应用程序的目录。
运行以下命令:
这将在生产模式下构建 Angular 应用程序,并在 dist 文件夹中生成 Angular 应用程序工件。
打开 ASP .NET Core 应用程序的 Visual Studio 项目。
在“解决方案资源管理器”中,右键单击“wwwroot”文件夹,然后选择“从项目中排除”。
右键单击 Angular 应用程序项目,然后选择 Add > Existing Item。
导航到 dist 文件夹并选择所有 Angular 应用程序工件。
单击“添加”。 这会将 Angular 应用程序项目添加到 ASP .NET Core 应用程序项目。
右键单击 ASP .NET Core 应用程序项目,然后选择“发布”。
这会将 ASP .NET Core 应用程序发布到 Azure,包括 Angular 应用程序项目。
结果
路由问题当您尝试访问注册页面时出现 404 错误的原因是 Angular 路由器未配置为处理 /Identity/Account/Register 路由。要解决此问题,您需要向 Angular 路由器配置文件添加路由。
为此,请打开 Angular 项目中的 app-routing.module.ts 文件。将以下路由添加到路由数组中:
{ path: 'Identity/Account/Register', component: RegisterComponent }
这将告诉 Angular 路由器在用户导航到 /Identity/Account/Register 路由时加载 RegisterComponent 组件。
添加路由后,需要构建并发布 Angular 项目。然后,您可以在浏览器中导航到注册页面,它应该会正确加载。
评论
npm