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.
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"}); } }
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
- 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.
Perhaps the Map extension method of ApplicationBuilder suits your needs :
in the Configure method of Startup let myVersion1MappingFunction configure a separate middleware pipeline:
On using Map extension the fragment ("/1") is removed from
HttpRequest.Path