ASP.NET Core 5默认Web API项目访问WeatherForecast接口返回404求助
ASP.NET Core 5 Web API 404 问题排查方案
你提供的控制器代码本身不存在语法问题:
[ApiController] [Route("[controller]")] public class WeatherForecastController : ControllerBase { [HttpGet] public string Get() { return "test"; } }
可按以下步骤逐一排查:
1. 确认服务监听端口与启动配置
- 首先查看项目启动时控制台输出的监听日志,确认是否存在
Now listening on: http://localhost:5000的记录,避免实际启动端口与预期不符 - 检查项目
Properties目录下的launchSettings.json文件,确认对应启动配置的applicationUrl属性是否包含http://localhost:5000 - 执行命令
lsof -i :5000查看5000端口是否被其他进程占用,若存在占用可以修改启动端口或者结束占用进程
2. 检查中间件配置顺序
ASP.NET Core 5 默认使用Startup.cs配置中间件,必须保证中间件顺序符合要求,否则会导致路由无法匹配:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { // 省略其他前置中间件 app.UseRouting(); // 必须在UseAuthorization、UseEndpoints之前 app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); // 必须存在,否则不会注册控制器路由 }); }
如果漏写endpoints.MapControllers()或者UseRouting位置错误,都会直接导致控制器接口返回404。
3. 排查路由规则配置
- 确认控制器类为
public修饰符,且继承自ControllerBase,否则ASP.NET Core不会将其识别为控制器 - 检查是否配置了全局路由前缀,比如在
ConfigureServices中添加了以下配置:
如果配置了全局前缀,需要访问services.AddControllers(options => { options.RoutePrefix = new RouteAttribute("api"); });http://localhost:5000/api/weatherforecast才能命中接口 - 确认是否配置了控制器扫描过滤规则,限制了只有特定命名空间下的控制器会被加载,如果有相关配置需要确保
WeatherForecastController在扫描范围内 - 若手动开启了路由大小写敏感配置,需要注意访问路径大小写与控制器名称匹配,默认配置下路由不区分大小写
4. 验证HTTPS跳转配置
如果项目默认开启了强制HTTPS跳转,访问HTTP端口会被重定向到HTTPS端口(默认5001),可以直接尝试访问https://localhost:5001/weatherforecast验证是否能正常返回结果。
内容的提问来源于stack exchange,提问作者HachDev
相关产品推荐
相关产品推荐

