在Visual Studio Code中创建WebAPI时为何看不到控制器?
解决VS Code中创建WebAPI后找不到控制器的问题
问题原因
.NET 6及以上版本的dotnet new webapi模板默认采用最小API模式,不会生成传统的控制器类,接口路由和业务逻辑直接写在Program.cs文件中。
解决方法
方法一:创建带控制器的WebAPI项目
执行命令时添加--use-controllers参数,指定生成包含控制器的模板:
dotnet new webapi -o WebAPI --use-controllers
执行该命令后,生成的项目会自动创建Controllers文件夹,并包含默认的WeatherForecastController.cs控制器文件。
方法二:手动给现有项目添加控制器
- 在项目根目录新建
Controllers文件夹。 - 在该文件夹下创建控制器类,示例代码(以
WeatherForecastController.cs为例):
using Microsoft.AspNetCore.Mvc; namespace WebAPI.Controllers; [ApiController] [Route("[controller]")] public class WeatherForecastController : ControllerBase { private static readonly string[] Summaries = new[] { "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" }; private readonly ILogger<WeatherForecastController> _logger; public WeatherForecastController(ILogger<WeatherForecastController> logger) { _logger = logger; } [HttpGet(Name = "GetWeatherForecast")] public IEnumerable<WeatherForecast> Get() { return Enumerable.Range(1, 5).Select(index => new WeatherForecast { Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)), TemperatureC = Random.Shared.Next(-20, 55), Summary = Summaries[Random.Shared.Next(Summaries.Length)] }) .ToArray(); } } public class WeatherForecast { public DateOnly Date { get; set; } public int TemperatureC { get; set; } public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); public string? Summary { get; set; } }
- 修改
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.UseHttpsRedirection(); // 映射控制器路由 app.MapControllers(); app.Run();
内容的提问来源于stack exchange,提问作者taleen wahdan
相关产品推荐
相关产品推荐

