Skip to content

Support API Version Model Binding #320

Closed
@commonsensesoftware

Description

@commonsensesoftware

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

Metadata

Metadata

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions