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 ...
}
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"));
}
}
}
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();