重命名WeatherForecastController出现404错误相关问题咨询
问题根因
该现象和控制器命名逻辑本身无关,是Angular侧开发代理转发规则未匹配新控制器路由导致的:
- VS 2022 自带的 Angular + ASP.NET Core 整合模板,默认配了路径前缀匹配的代理规则,仅转发符合指定前缀的请求到后端 WebApi 端口
- ASP.NET Core 控制器默认路由规则为
[Route("[controller]")],控制器名去掉Controller后缀即为路由前缀:WeatherForecastPlop2Controller对应路由前缀为/weatherforecastplop2,和默认代理规则匹配的/weatherforecast前缀一致,因此请求可以正常转发到后端BobWeatherForecastController对应路由前缀为/bobweatherforecast,不符合默认前缀匹配规则,请求被 Angular 开发服务器直接拦截,没有转发到后端,因此调用失败
- Swagger 是直接访问后端 WebApi 端口,不走前端代理,因此所有控制器调用都正常
解决方案
方案1:适配单控制器新增场景
找到 Angular 项目下的代理配置文件,通常是根目录的 proxy.conf.js 或者 src/proxy.conf.json,新增对应控制器的路由匹配规则:
以 proxy.conf.json 为例,新增配置如下:
"/bobweatherforecast": { "target": "https://localhost:你的后端SSL端口号", "secure": false, "changeOrigin": true }
如果是 .js 格式的配置文件,规则写法同理,新增对应前缀的匹配项即可。
方案2:适配多控制器扩展场景(推荐)
统一路由规则,后续新增控制器无需反复修改代理配置:
- 调整所有后端控制器的路由属性,统一加
api前缀:[Route("api/[controller]")],调整后BobWeatherForecastController的路由前缀变为/api/bobweatherforecast - 修改代理配置,仅保留一条通用匹配规则:
"/api/*": { "target": "https://localhost:你的后端SSL端口号", "secure": false, "changeOrigin": true }
如果使用的是 ASP.NET Core 6+ 内置的 Spa 代理(无前端代理配置文件),在 Program.cs 中修改 UseSpa 配置块即可:
.UseSpa(spa => { spa.ProxyToSpaDevelopmentServer("http://localhost:4200"); // 新增规则:api前缀的请求直接走控制器路由,不转发到Angular spa.ApplicationBuilder.UseWhen(context => context.Request.Path.StartsWithSegments("/api"), app => { app.UseRouting(); app.UseEndpoints(endpoints => endpoints.MapControllers()); }); });
验证
修改配置后重启 Angular 开发服务器(不要仅刷新页面,需停止服务后重新启动,或直接重启VS启动整个项目),再调用接口即可正常访问。
内容的提问来源于stack exchange,提问作者user29300
相关产品推荐
相关产品推荐

