I have an existing ASP.NET WebAPI project with a controller that looks like this:
namespace WebSite.WebApi.Controllers
{
[RoutePrefix("api/accounts")]
public class AgreementsController : ApiController
{
// GET ~/api/accounts/xxx
[Route("{accountId}")]
public IHttpActionResult Get(string accountId) => Ok( $"Account #{accountId} from default controller");
}
}
I'm calling the action method by using this URL: /api/accounts/123
Now, I want to make another version of this controller that would be called if a client appends a certain query string parameter like this: /api/accounts/123?api-version=2. The first URL (without api-version param) should still lead to the initial controller
I thought I could use aspnet-api-versioning by Microsoft by making another controller and using ApiVersion attribute like this:
namespace WebSite.WebApi.Controllers.V2
{
[ApiVersion("2")]
[RoutePrefix("api/accounts")]
public class AgreementsController : ApiController
{
// GET ~/api/accounts/xxx?api-version=2
[Route("{accountId}")]
public IHttpActionResult Get(string accountId) => Ok($"Account #{accountId} from V2 controller");
}
}
But it doesn't seem to work like that. All the samples on GitHub suggest that I should decorate both my controllers with ApiVersion attribute and explicitly use version in both URLs: /api/accounts/123?api-version=1 and /api/accounts/123?api-version=2.
But I need the URL for the 1st controller to remain the same as it is now: /api/accounts/123. Is there any way to achieve this with aspnet-api-versioning
library? Or is there some other API versioning library that can accomplish this task?