I need some clarification on API versioning in .Net Core framework.

My client want the version to be handled in Router level. Like

[Route("1/[controller]")]
public class SampleController : Controller
{
    [HttpGet("version")]
    public IActionResult GetVersion()
    {
        return Ok({"Message": "API Version 1"});
    }
}

I access this using, https://www.somedomain.com/api/1/sample/version

In IIS, I will create an application called 'api' (The path 'api' in my URL will be taken care here) under default web site and host my code here.

In order to do API versioning, what is the better way that I can follow here.

  1. Can I do this?

    [ApiVersion("1")]
    [Route("{version:apiVersion}/[controller]")]
    public class SampleController : Controller
    {
        [HttpGet("version")]
        public IActionResult GetVersion()
        {
           return Ok({"Message": "API Version 1"});
        }
    
        [HttpGet("version"), MapToApiVersion("2" )]
        public IActionResult GetVersion()
        {
            return Ok({"Message": "API Version 2"});
        }
    }
    
  2. Is it possible to create an application under an application in IIS. Like,

Default Web Site - > api -> 1 -> Code without API version mentioned

Default Web Site - > api -> 2 -> Updated Code without API version mentioned

  1. Or can I create the versions as application in IIS and deploy the code under each applciation version. Like,

Default Web Site - > 1 -> Code without API version mentioned

Default Web Site - > 2 -> Updated Code without API version mentioned

This will end up in changing my API URL, which i don't prefer. I still want to go with the same URI.
I access this using, https://www.somedomain.com/api/1/sample/version

Please advise the best approach that I can follow here.

Related posts

Recent Viewed