Step 1:
Open Visual Studio 2022 and Click Create New Project and choose ASP.NET Core Web API project.
Step 2:
Choose .NET 6.0 Framework or you can choose .NET 5.0 , For .NET 6.0 we will work in Program.cs file and for .NET 5.0 we will do the same thing in Startup.cs file.

Step 3:
Install NuGet Package
1. Right click on the project and and select Manage NuGet Package
2. Install the following plugins
- Microsoft.AspNetCore.Mvc.Versioning
Step 4:
Now add the versioning service in the application. Go to the Program.cs class Add
builder.Services.AddApiVersioning();
your Program.cs class should look like this now

Step 5:
Now add a Class named Item.cs on the solution. and copy paste this code.

namespace ApiVersioning
{
public class Itemv1
{
public int Id { get; set; }
public string Name { get; set; }
}
}
Step 6:
Now add a Controller named ItemController.cs and add the following code there and run the project.
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
namespace ApiVersioning.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class ItemController : ControllerBase
{
[HttpGet("{id}")]
public IActionResult GetItemv1([FromRoute] int id)
{
var item = new Itemv1
{
Id = id,
Name = "ABC"
};
return Ok(item);
}
}
}
Now Check it on Postman
URL : https://localhost:44320/api/item/1

This will return An API version is required, but was not specified. because we didn’t specify the version. Now go back to Program.cs class and add the following code.
builder.Services.AddApiVersioning(config =>
{
config.DefaultApiVersion = ApiVersion.Default;
config.AssumeDefaultVersionWhenUnspecified = true;
config.ReportApiVersions = true;
});
The error will be resolved now and all the api version is now set to a default version. By setting the ReportApiVersions = true you can able to see all the supported version of the APIs.

Step 7:
Now, Go back to Item.cs class and add this following code.
namespace ApiVersioning
{
public class Itemv1
{
public int Id { get; set; }
public string Name { get; set; }
}
public class Itemv2
{
public int Id { get; set; }
public string ProductName { get; set; }
}
}
Step 8:
Now go to ItemController.cs and add this following code.
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
namespace ApiVersioning.Controllers
{
[ApiVersion("1.0")]
[ApiVersion("2.0")]
[Route("api/[controller]")]
[ApiController]
public class ItemController : ControllerBase
{
[HttpGet("{id}")]
public IActionResult GetItemv1([FromRoute] int id)
{
var item = new Itemv1
{
Id = id,
Name = "ABC"
};
return Ok(item);
}
[HttpGet("{id}")]
[MapToApiVersion("2.0")]
public IActionResult GetItemv2([FromRoute] int id)
{
var item = new Itemv2
{
Id = id,
ProductName = "XYZ"
};
return Ok(item);
}
}
}
Here you can see another method with different version is created which is mapping with [MapToApiVersion(“2.0”)] and at the top of the class we specified that two version of API is existed here by this two attributes [ApiVersion(“1.0”)] & [ApiVersion(“2.0”)]
Now Check
URL: https://localhost:44320/api/item/1

This returns the default API but the 2nd version of the API you need to add a version number at the end of the URL.
URL: https://localhost:44320/api/item/1?api-version=2.0

here you can clearly see this return the 2nd API where product name is XYZ.
Now tell what will this URL “https://localhost:44320/api/item/1?api-version=1.0” return ??
Step 9:
Now Change the route attribute to
[Route("api/v{version:apiVersion}/[controller]")]
and Run the application again.

Now Check
URL: https://localhost:44320/api/v1/item/1

URL: https://localhost:44320/api/v2/item/1

That’s All. Happy Versioning .