Closed
Description
Overview
The requested ApiVersion is currently accessible via the following extension methods:
Request.GetRequestedApiVersion()
[Web API]Request.ApiVersioningProperties().RequestedApiVersion
[Web API]HttpContext.GetRequestedApiVersion()
[Core]HttpContext.Features.GetFeature<IApiVersioningFeature>().RequestedApiVersion
[Core]
While this functionality is useful in a variety of contexts, it would be more natural to receive the ApiVersion value in the scope of a controller using model binding.
Proposed Solution
Enable modeling binding in ASP.NET Core and Web API. This will enable controllers to define an ApiVersion parameter and have the value provided by model binding.
[ApiVersion( "1.0" )]
[Route( "api/values" )]
public class ValuesController : ApiController
{
public IHttpActionResult Get( ApiVersion requestedApiVersion ) =>
Ok( new { controller = GetType().Name, version = requestedApiVersion.ToString() } );
}
Figure 1: API versioning model binding in ASP.NET Web API
[ApiVersion( "1.0" )]
[Route( "api/[controller]" )]
public class ValuesController : ControllerBase
{
[HttpGet]
public IActionResult Get( ApiVersion requestedApiVersion ) =>
Ok( new { controller = GetType().Name, version = requestedApiVersion.ToString() } );
}
Figure 2: API versioning model binding in ASP.NET Core