Swashbuckle падает, просто добавив еще один метод действия в контроллер - PullRequest
0 голосов
/ 29 сентября 2019

Я только что добавил еще один метод post в контроллере, и Swagger Swashbuckle потерпел крах. Как это решить?

 [HttpPost]
        public IActionResult CreateCars(List<Car> cars)
        {
            _carService.CreateCars(cars);
            return NoContent();
        }

System.NotSupportedException: HTTP method "POST" & path "api/Cars" overloaded by actions - IrkcnuApi.Controllers.CarsController.Create (WebApi),MyWebAPI.Controllers.CarsController.CreateCars (MyWebApi). Actions require unique method/path combination for OpenAPI 3.0. Use ConflictingActionsResolver as a workaround
   at Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator.GenerateOperations(IEnumerable`1 apiDescriptions, SchemaRepository schemaRepository)
   at Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator.GeneratePaths(IEnumerable`1 apiDescriptions, SchemaRepository schemaRepository)
   at Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator.GetSwagger(String documentName, String host, String basePath)
   at Swashbuckle.AspNetCore.Swagger.SwaggerMiddleware.Invoke(HttpContext httpContext, ISwaggerProvider swaggerProvider)
   at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)

1 Ответ

2 голосов
/ 29 сентября 2019

В вашем контроллере уже есть метод с атрибутом HttpPost. Поскольку вы явно не указываете маршрут, эти операции конфликтуют.

Вы решите это, указав маршрут для этих операций POST, например:

[HttpPost("createMultiple")]
public IActionResult CreateCars(List<Car> cars) {}

[HttpPost()]
public IActionResult CreateCar(Car car) {}

Вышеприведенное предложение не соответствует действительностине то, что 'RESTfull', так как у вас есть глаголы в ваших URL.

Я бы предложил изменить ваш код так, чтобы у вас был только один метод 'Create', так как вышеупомянутые 2 операции фактически не совпадают (Я полагаю). Вызов операции CreateCars с коллекцией автомобилей, которая содержит только один элемент, в некотором смысле фактически идентичен вызову операции CreateCar.

...