我刚刚设置了一个新的 .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/