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

VS2022 React预览项目模板:客户端与控制器通信机制解析

核心原因:ASP.NET Core Web API的默认路由与HTTP动词匹配机制

你之所以用fetch('weatherforecast')就能命中控制器的Get()方法,而非指定方法名,本质是ASP.NET Core Web API的约定式路由+HTTP动词自动匹配规则在起作用,具体拆解如下:

1. 控制器路由的默认约定

你的控制器类名应该是WeatherForecastController(VS模板默认命名)。ASP.NET Core框架会自动识别控制器类名的Controller后缀,将前缀WeatherForecast作为路由的核心段——也就是URL中的weatherforecast。

项目模板的路由配置(一般在Program.cs中)会包含app.MapControllers();,配合控制器上的[ApiController]特性,默认启用基于[controller]的路由模板,无需手动给控制器添加[Route]特性就能生成路由。

2. HTTP动词与动作方法的自动匹配

你的控制器方法是Get(),没有添加额外的路由特性(比如[HttpGet("GetWeatherForecast")])。此时框架会根据方法名的前缀(Get/Post/Put/Delete等)自动绑定对应的HTTP动词:

  • 以Get开头的方法,默认匹配GET请求
  • 以Post开头的方法,默认匹配POST请求

当你调用fetch('weatherforecast')时,fetch默认发起的是GET请求,框架会自动找到WeatherForecastController中匹配GET动词的Get()方法来处理请求,不需要在URL里指定方法名。

3. 为什么你的预期写法不生效

如果你想通过fetch('GetWeatherForecast')调用,需要给控制器方法添加显式的路由特性,比如:

[HttpGet("GetWeatherForecast")]
public IEnumerable<WeatherForecast> Get()
{
    // 方法逻辑
}

此时URL才需要写成/weatherforecast/GetWeatherForecast(或者如果控制器有路由前缀,按规则拼接)。但VS默认的React+Web API模板采用的是RESTful风格的约定式路由,不会给方法添加这类显式路由,所以直接用控制器路由段+HTTP动词就能匹配。


内容的提问来源于stack exchange,提问作者user2049142

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 03:42:13