Search code examples
c#asp.net-coreswaggeropenapi.net

SwaggerGeneratorException: Conflicting method/path combination "POST api/v{version}/Employee" for actions


I have problem when run swagger with this methods. Can you help me?

[HttpPost]
        [ApiVersion("1.0")]
         public IActionResult SetEmployeeV1()
        { 
          v1 ...
        }
        [HttpPost]
        [ApiVersion("2.0")]
        public IActionResult SetEmployeeV2()
        {
           v2 ...             
        }

Solution

  • I create 2 controllers to represent different versions.

    This is version one.

    using Microsoft.AspNetCore.Mvc;
    
    namespace WebApiNet6.Controllers.V1
    {
        //[Route("api/[controller]")]
        [ApiController]
        [Route("api/v{version:apiVersion}/Data")]
        [ApiVersion("1.0")]
        public class DataController : ControllerBase
        {
            private static readonly string[] Summaries = new[]
            {
            "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
            };
    
            [HttpGet]
            public IEnumerable<string> Get()
            {
                return Summaries.Where(x => x.StartsWith("C"));
            }
        }
    }
    

    This is version 2:

    namespace WebApiNet6.Controllers.V2
    {
        //[Route("api/[controller]")]
        [ApiController]
        [Route("api/v{version:apiVersion}/Data")]
        [ApiVersion("2.0")]
        public class DataController : ControllerBase
        {
            private static readonly string[] Summaries = new[]
            {
            "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
            };
    
            [HttpGet]
            public IEnumerable<string> Get()
            {
                return Summaries.Where(x => x.StartsWith("S"));
            }
        }
    }
    

    enter image description here

    Now I can call them successfully in a browser, but I can't let the api displayed in swagger. So I need to modify Program.cs(Startup.cs in .net 5)

    using Microsoft.OpenApi.Models;
    
    builder.Services.AddApiVersioning(setup =>
    {
        setup.DefaultApiVersion = new ApiVersion(1, 0);
        setup.AssumeDefaultVersionWhenUnspecified = true;
        setup.ReportApiVersions = true;
    });
    builder.Services.AddEndpointsApiExplorer();
    builder.Services.AddSwaggerGen(c => {
        c.SwaggerDoc("v1", new OpenApiInfo
        {
            Version = "v1",
            Title = "this is V1"
        });
        c.SwaggerDoc("v2", new OpenApiInfo
        {
            Version = "v2",
            Title = "this is V2"
        });
    
        c.ResolveConflictingActions(apiDescriptions => apiDescriptions.First());
    });
    
    app.UseSwagger();
    app.UseSwaggerUI();
    

    enter image description here