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

.NET Core中Program.cs端点正常但控制器/api/greet返回404

问题现象
  • 运行在Proxmox Debian CT上的.NET Core测试程序,地址192.168.1.200:5000
  • /test端点可正常访问(返回200 OK)
  • /api/greet端点返回404 Not Found,控制器未初始化(构造函数中的Console.WriteLine无输出)

相关代码

Program.cs

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddControllers();

var app = builder.Build();

app.UseRouting();
app.UseEndpoints(endpoints =>
{
    endpoints.MapControllers();
});

app.MapGet("/test", () => "Test route reached");
app.Run();

Controller.cs

namespace HelloWorldApi.Controllers
{
    [ApiController]
    [Route("api")]
    public class HelloWorldController : ControllerBase
    {
        [HttpGet("greet")]
        public IActionResult GetGreeting()
        {
            return Ok("Hello World");
        }
    }
}
排查与解决方案

1. 确保控制器程序集被扫描到

.NET Core默认扫描AddControllers所在程序集的控制器,若控制器在其他程序集或扫描范围异常,需显式指定:
修改Program.cs中的服务配置:

builder.Services.AddControllers()
    .AddApplicationPart(typeof(HelloWorldApi.Controllers.HelloWorldController).Assembly);

2. 简化路由配置(适配.NET 6+模型)

.NET 6+的WebApplication已简化路由逻辑,替换原有的UseRouting+UseEndpoints写法,避免中间件顺序问题:

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddControllers();

var app = builder.Build();

// 替换原路由配置,直接映射控制器
app.MapControllers();

app.MapGet("/test", () => "Test route reached");
app.Run();

3. 检查部署文件完整性

确认Debian CT上的部署目录包含完整的程序文件:

  • 本地执行dotnet publish后,将publish目录下所有文件复制到CT中
  • 确保部署目录存在对应项目名称的dll文件(如HelloWorldApi.dll)

4. 启用日志排查启动过程

在Program.cs中添加控制台日志,查看控制器是否被加载:

var builder = WebApplication.CreateBuilder(args);

// 启用控制台日志输出
builder.Logging.AddConsole();

builder.Services.AddControllers();

var app = builder.Build();

app.MapControllers();

app.MapGet("/test", () => "Test route reached");
app.Run();

启动程序后,检查控制台输出,若看到类似以下日志,说明控制器端点已成功注册:

info: Microsoft.AspNetCore.Routing.EndpointMiddleware[0]
      Registered endpoint 'HTTP: GET /api/greet'

5. 确认控制器基础配置

  • 控制器类必须为public访问修饰符(你的代码已满足)
  • 若控制器在独立项目中,需确保主项目已添加该项目的引用,并在AddControllers中指定其程序集

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 13:25:53