使用相同动词的多个路由到 .NET6 REST API 控制器

问题描述 投票:0回答:1

距离上次使用 .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 中。

如果从模板创建天气预报示例并将控制器粘贴到新项目中,它将按预期工作。

有人知道我错过了什么吗?

c# .net-6.0 swagger-ui swashbuckle swagger-3.0
1个回答
0
投票

我从一个新的 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”。

© www.soinside.com 2019 - 2024. All rights reserved.