asp.net-core - NSwag + System.InvalidOperationException : The method 'get' on path '/Site' is registered multiple times

标签 asp.net-core nswag swashbuckle.aspnetcore

我刚刚设置了一个新的 .NET Core 3.1 项目,但在尝试使用 NSwag.AspNetCore 时遇到了一些问题,这与我的 Controller 有关,但我无法弄清楚。这是我的站点 Controller :

[Route("[controller]")]
[ApiController]
public class SiteController : BaseController
{
    private readonly ISiteService _siteService;
    public SiteController(ISiteService siteService, ILogger<SiteController> logger) : base(logger)
    {
        _siteService = siteService;
    }

    [HttpGet]
    public IActionResult GetAllSites() => (ReadService(() => _siteService.Sites()));

    [HttpGet("domainName/{domainName}")]
    public IActionResult GetByDomainName(string domainName) => (ReadService(() => _siteService.Site(domainName)));

    [HttpGet("status")]
    public Task<IActionResult> GetStatusAsync() => (ReadServiceAsync(async () => await _siteService.GetApiStatusAsync()));

    [HttpGet("lookupdata")]
    public Task<IActionResult> GetLookupDataAsync() => (ReadServiceAsync(async () => await _siteService.GetLookupDataAsync()));

}

我正在点击/Site,它通过 postman 工作正常,它调用 GetAllSites()。

但由于某种原因,我在尝试生成 swagger json(点击 SwaggerUI)时收到以下错误:

System.InvalidOperationException: The method 'get' on path '/Site' is registered multiple times.
    at NSwag.Generation.AspNetCore.AspNetCoreOpenApiDocumentGenerator.AddOperationDescriptionsToDocument(OpenApiDocument document, Type controllerType, List`1 operations, OpenApiDocumentGenerator swaggerGenerator, OpenApiSchemaResolver schemaResolver)
    at NSwag.Generation.AspNetCore.AspNetCoreOpenApiDocumentGenerator.GenerateForControllers(OpenApiDocument document, IGrouping`2[] apiGroups, OpenApiSchemaResolver schemaResolver)
    at NSwag.Generation.AspNetCore.AspNetCoreOpenApiDocumentGenerator.GenerateAsync(ApiDescriptionGroupCollection apiDescriptionGroups)
    at NSwag.Generation.AspNetCore.AspNetCoreOpenApiDocumentGenerator.GenerateAsync(Object serviceProvider)
    at NSwag.AspNetCore.OpenApiDocumentProvider.GenerateAsync(String documentName)
    at NSwag.AspNetCore.Middlewares.OpenApiDocumentMiddleware.GenerateDocumentAsync(HttpContext context)
    at NSwag.AspNetCore.Middlewares.OpenApiDocumentMiddleware.GetDocumentAsync(HttpContext context)
    at NSwag.AspNetCore.Middlewares.OpenApiDocumentMiddleware.Invoke(HttpContext context)

我不确定我在这里做错了什么,一切似乎都已正确设置。

为了它的值(value),如果那里有问题,我还包括自定义 BaseController 类:

[ApiController]
public abstract class BaseController : ControllerBase
{
    private ILogger _logger;
    protected BaseController(ILogger logger)
    {
        _logger = logger;
    }
}

如果我用以下方式装饰 GetAllSites:

[HttpGet("AllSites")]

它会工作,但我不想那样做,我希望在我点击/site 时能够获得所有站点

最佳答案

对于每个操作,您可以指定如下路径:

[HttpGet]
[Route("{id:min(1)}/GetItems1", Name = "GetHotelFacilities")]
public async Task getItems1(){}

[HttpGet]
[Route("{id:min(1)}/GetItems2", Name = "GetHotelFacilities")]
public async Task getItems2(){}

关于asp.net-core - NSwag + System.InvalidOperationException : The method 'get' on path '/Site' is registered multiple times,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63348590/

相关文章:

c# - NSwag:如何在 C# -> Swagger -> C# 客户端中使用自定义值对象类型?

angular - Swagger 在 Angular 12 中使用 _observableOf(null) 自动生成文件问题?

c# - Swagger UI 将绑定(bind)到单个操作参数的多个 header 作为单个 json 对象发送,而不是作为多个 header

c# - Swashbuckle 是否支持将自定义操作标签表示为 UI 中的徽章的方法?

c# - Serilog 不会生成有效的 json(结构化日志记录)

c# - 如何获取当前 View 的url?

asp.net-core - .NET Core 3 - IIS - 应用程序初始化不起作用

c# - 服务器端 JSON 压缩 .net Core

asp.net-core-webapi - 自定义自动生成的 Swagger 定义