You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

重命名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:适配多控制器扩展场景(推荐)

统一路由规则,后续新增控制器无需反复修改代理配置:

  1. 调整所有后端控制器的路由属性,统一加api前缀:[Route("api/[controller]")],调整后BobWeatherForecastController的路由前缀变为/api/bobweatherforecast
  2. 修改代理配置,仅保留一条通用匹配规则:
"/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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 10:06:04