距离上次使用 .NET Core 2 已经有一段时间了,它似乎毫无障碍地工作。
但自从开始使用 .NET6 以来,我似乎很难让 ApiController 具有多个路由。
相关配置服务:
services.AddEndpointsApiExplorer();
services.AddSwaggerGen();
services.AddControllers().AddApplicationPart(typeof(TestController).Assembly);
应用程序部分是必需的,因为控制器位于不同的组件中。
相关ConfigureApp:
app.UseRouting();
app.UseSwagger();
app.UseSwaggerUI();
我的控制器:
[ApiController]
[Route("[controller]")]
[Consumes("application/json")]
[Produces("application/json")]
public class TestController : ControllerBase
{
[HttpGet("Test1")]
public IActionResult GetTest1()
{
return Ok(Array.Empty<string>());
}
[HttpGet("Test2")]
public IActionResult GetTest2()
{
return Ok(Array.Empty<string>());
}
[HttpGet("Test3")]
public IActionResult GetTest3()
{
return Ok(Array.Empty<string>());
}
}
它们按预期显示在 Swagger UI 中。
但是当我尝试执行它们时,我总是得到
curl -X 'GET' \
'http://localhost:5000/Test/Test1' \
-H 'accept: */*'
404: Error Not Found
补充:它们在 UI 中可见,但不包含在后台生成的 swagger.json 中。
如果从模板创建天气预报示例并将控制器粘贴到新项目中,它将按预期工作。
有人知道我错过了什么吗?
我从一个新的 API 项目开始尝试了您的示例。 你错过了打电话
app.MapControllers()
。
AddSwaggerGen
与路由无关,因此它根据控制器找到端点,但如果不调用MapControllers
方法,则不会映射该端点。
如果您尝试从
/swagger
页面调用端点,您还会发现404错误。
这是适用于测试项目的
Program.cs
:
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
builder.Services.AddControllers();
var app = builder.Build();
// Configure the HTTP request pipeline.
// app.UseHttpsRedirection();
// app.UseAuthorization();
app.MapControllers();
// app.UseRouting(); // if you enable this line and disable the previous you got the 404 error
app.UseSwagger();
app.UseSwaggerUI();
app.Run();
来自 ASP.NET Core 中的路由:“应用程序通常不需要调用 UseRouting 或 UseEndpoints”。