ASP.NET Core 6、Angular 和 REST 前缀(使用 Microsoft.AspNetCore.SpaProxy)

Sea*_*ean 1 asp.net-core angular

如何让 ASP.NET Core 6 Angular 应用程序在 API 路由上使用前缀?

我使用模板创建一个全新的项目ASP.NET Core with Angular。然后我做了两个小改变:

  1. 更改 Angular 组件以使用api/前缀:

在此输入图像描述

  1. 更改 WebApi 控制器以使用api/前缀:

在此输入图像描述

结果是 404:

在此输入图像描述

Sea*_*ean 7

解释:

发生此行为的原因是 ASP.NET Core 中发生了更改,让前端开发服务器代理对 ASP.NET Core 的请求,而不是相反(这是 ASP.NET Core 早期版本中的方法)。换句话说,Angular 开发服务器代理对 ASP.NET Core 的 API 数据请求,而在以前的 ASP.NET 版本中,IIS Express 会将 Angular 请求代理到 Angular SPA 服务器。

请参阅: https://devblogs.microsoft.com/dotnet/asp-net-core-updates-in-net-6-preview-4/#improved-single-page-app-spa-templates

解决方案:

文件夹中ClientApp现在有一个proxy.conf.js文件。将前缀添加api/到此文件中意味着 Angular SPA 开发服务器现在知道对该前缀 URL 的请求应传递到 .NET 服务器:

配置 SPA 代理服务器的旁路

您可以使用通配符,例如"/api/**"

有用的知识:

由于这可能对相关问题有用,因此文件中没有前缀proxy.conf.js,HTTP 请求的实际响应如下所示:

SPA 代理响应

这不是来自 ASP.NET Core 代码的响应;这是来自 Angular 的响应 - 即该请求没有通过 Angular 代理服务器传递到 IIS Express。

此外,了解 SPA 代理服务器是使用该Microsoft.AspNetCore.SpaProxy包启动的也很有用。我Program.cs完全更改了启动代码以删除 Angular/SPA 逻辑,但我仍然在启动时获取 SPA 代理服务器,并从 API 路由获取相同的响应代码。这是因为在 中launchsettings.json,有对SpaProxy包的以下引用:

SPA代理服务器的启动配置

因此,除非您删除文件中的这两个引用launchSettings.json,否则 SPA 代理将继续启动。如果您想完全删除 Spa 代理,请删除这些引用。然后,如果需要,您可以在不涉及 SPA 代理的情况下调试正在发生的情况。但是,如果您想继续采用新SPA proxy to ASP.NET Core方法,该proxy.conf.js文件似乎是前进的方向。