I try to versioning ASP.NET Core MVC API with Asp.Versioning.Mvc.
I create a new project like :
dotnet new webapi --framework net7.0
dotnet add package Asp.Versioning.Mvc --version 7.0.1
Next, I remove all controllers and edit Program.cs like :
using Asp.Versioning;
using Microsoft.AspNetCore.Mvc;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
builder.Services.AddApiVersioning();
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();
[ApiVersion(1.0)]
[Route("api/v{version:apiVersion}/helloworld")]
public class HelloWorldController : ControllerBase
{
public string Get() => "Hello world! v1";
}
[ApiVersion(2.0)]
[Route("api/v{version:apiVersion}/helloworld")]
public class HelloWorld2Controller : ControllerBase
{
public string Get() => "Hello world! v2";
}
But when I start the API and call http://localhost:5069/api/v1.0/helloworld
, I get this error :
Microsoft.AspNetCore.Routing.Matching.AmbiguousMatchException: The request matched multiple endpoints. Matches:
HelloWorldController.Get (ApiVersioningPoc)
HelloWorld2Controller.Get (ApiVersioningPoc)
at Microsoft.AspNetCore.Routing.Matching.DefaultEndpointSelector.ReportAmbiguity(CandidateState[] candidateState)
at Microsoft.AspNetCore.Routing.Matching.DefaultEndpointSelector.ProcessFinalCandidates(HttpContext httpContext, CandidateState[] candidateState)
at Microsoft.AspNetCore.Routing.Matching.DfaMatcher.MatchAsync(HttpContext httpContext)
at Microsoft.AspNetCore.Routing.EndpointRoutingMiddleware.Invoke(HttpContext httpContext)
at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddlewareImpl.Invoke(HttpContext context)
I found this similar question :
Asp.Versioning.Http AmbiguousMatchException: The request matched multiple endpoints on controllers
I try to add AddMvc
(from the answer) without success.