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

.NET为何无法识别自定义Controller?

.NET自定义Controller返回404问题排查与解决

问题场景

刚接触.NET,编写了带GET接口的DungeonController,期望返回字符串,但请求始终返回404,而VS默认生成的WeatherForecastController运行正常。之前使用dotnet CLI创建项目时该Controller能正常运行,相关代码如下:

正常运行的示例Controller

using Microsoft.AspNetCore.Mvc;

namespace RPG.Controllers
{
    [ApiController]
    [Route("[controller]")]
    public class WeatherForecastController : ControllerBase
    {
        private static readonly string[] Summaries = new[] { "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" };

        [HttpGet]
        public IEnumerable<WeatherForecast> Get()
        {
            return Enumerable.Range(1, 5).Select(index => new WeatherForecast
            {
                Date = DateTime.Now.AddDays(index),
                TemperatureC = Random.Shared.Next(-20, 55),
                Summary = Summaries[Random.Shared.Next(Summaries.Length)]
            })
            .ToArray();
        }
    }
}

无法正常工作的自定义Controller

using Microsoft.AspNetCore.Mvc;

namespace RPG.Controllers
{
    [ApiController]
    [Route("dungeon")]
    public class DungeonController : ControllerBase {

        [HttpGet]
        public IEnumerable<string> Get() {
            string[] a = { "spider" };
            return a;
        }
    }
}

项目Program.cs代码

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();

var app = builder.Build();

if (!app.Environment.IsDevelopment()) {
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.MapControllers();

app.Run();

差异分析与解决方法

1. 路由匹配验证

你的DungeonController使用固定路由[Route("dungeon")],而示例控制器使用[Route("[controller]")](自动匹配控制器名称WeatherForecast)。需确认请求URL是否正确:

  • 正确请求地址应为 https://localhost:{端口号}/dungeon(HTTP协议则为http://开头)
  • 避免使用首字母大写的/Dungeon路径,虽然Windows系统下路由不区分大小写,但统一小写路径能避免跨环境问题。

2. 项目启动配置差异

VS默认创建的项目与dotnet CLI创建的项目可能存在启动配置差异:

  • 检查调试启动配置:右键项目→属性→调试,确认启动URL无额外前缀,或launchSettings.json(位于项目Properties目录下)中的applicationUrl配置与dotnet CLI项目一致,无多余路径。

3. 项目缓存与重建问题

VS的编译缓存可能导致控制器未被正确识别:

  • 执行清理解决方案:点击顶部菜单→生成→清理解决方案
  • 执行重建解决方案:点击顶部菜单→生成→重建解决方案
  • 重启VS后重新运行项目

4. 控制器注册验证

你的代码已正确完成控制器注册(builder.Services.AddControllers()和app.MapControllers()),且控制器符合命名约定(后缀为Controller)、继承ControllerBase并添加[ApiController]特性,这部分无需修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 08:05:38