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

.NET 8简易API控制器访问报404未找到,原因是什么?

问题描述

我用.NET 8创建了一个简易项目,编写了如下InterestsController控制器代码:

using Microsoft.AspNetCore.Mvc;

namespace WebApi.Controllers
{
    [ApiController]
    [Route("api/[controller]")]
    public class InterestsController : ControllerBase
    {
        private readonly ILogger<InterestsController> _logger;

        public InterestsController(ILogger<InterestsController> logger) 
        {
            _logger = logger;
        }

        [HttpGet("GetInterests")]
        public ActionResult GetInterests() 
        {
            _logger.LogInformation("GetInterests method called: ");
            return Ok("interests");
        }
    }
}

访问http://localhost:5264/api/interests/GetInterests时返回404,更换端口、使用不同工具甚至Swagger都无法识别该接口,这是为什么?是否是.NET 8的问题?

相关配置如下:

program.cs代码

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.Run();

launchSettings.json配置

{
  "$schema": "http://json.schemastore.org/launchsettings.json",
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:11726",
      "sslPort": 44386
    }
  },
  "profiles": {
    "http": {
      "commandName": "Project",
      "dotnetRunMessages": true,
      "launchBrowser": true,
      "launchUrl": "swagger",
      "applicationUrl": "http://localhost:5264",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "https": {
      "commandName": "Project",
      "dotnetRunMessages": true,
      "launchBrowser": true,
      "launchUrl": "swagger",
      "applicationUrl": "https://localhost:7201",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "launchUrl": "swagger",
      "applicationUrl": "http://localhost:7204;",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    }
  }
}
问题原因

不是.NET 8的问题,你使用的是最小API模板创建项目,该模板默认不会自动注册控制器服务和映射控制器路由。你的控制器代码本身没有问题,但框架并未加载该控制器,导致访问返回404,Swagger也无法识别接口。

解决方法

修改program.cs,添加两项关键配置:

  • 在添加Swagger服务之前,注册控制器服务:builder.Services.AddControllers();
  • 在Swagger中间件之后、app.Run()之前,映射控制器路由:app.MapControllers();

修改后的program.cs代码:

var builder = WebApplication.CreateBuilder(args);

// 注册控制器服务
builder.Services.AddControllers();

// 添加Swagger相关服务
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

var app = builder.Build();

// 开发环境启用Swagger
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

// 映射控制器路由
app.MapControllers();

app.Run();

修改完成后重新运行项目,即可正常访问接口,Swagger也会显示该接口。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 02:50:53