Skip to content

Commit fca6b08

Browse files
Merge pull request #6 from Microsoft/dev/chrimart/refactor-versioning-options
Consolidate all methods of retrieving API versioning options
2 parents 60b017c + 219eee4 commit fca6b08

File tree

3 files changed

+25
-40
lines changed

3 files changed

+25
-40
lines changed
Lines changed: 8 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
using System.Diagnostics.Contracts;
2-
namespace System.Web.Http
1+
namespace System.Web.Http
32
{
43
using Controllers;
54
using Diagnostics.CodeAnalysis;
@@ -9,9 +8,7 @@ namespace System.Web.Http
98
using Microsoft.Web.Http;
109
using Microsoft.Web.Http.Controllers;
1110
using Microsoft.Web.Http.Dispatcher;
12-
using Microsoft.Web.Http.Routing;
1311
using Microsoft.Web.Http.Versioning;
14-
using Routing;
1512

1613
/// <summary>
1714
/// Provides extension methods for the <see cref="HttpConfiguration"/> class.
@@ -20,43 +17,18 @@ public static class HttpConfigurationExtensions
2017
{
2118
private const string ApiVersioningOptionsKey = "MS_ApiVersioningOptions";
2219

23-
private static ApiVersioningOptions GetApiVersioningOptions( this HttpConfiguration configuration )
24-
{
25-
Contract.Requires( configuration != null );
26-
27-
var options = default( ApiVersioningOptions );
28-
configuration.Properties.TryGetValue( ApiVersioningOptionsKey, out options );
29-
return options;
30-
}
31-
32-
/// <summary>
33-
/// Gets the configured, default service API version.
34-
/// </summary>
35-
/// <param name="configuration">The current <see cref="HttpConfiguration">configuration</see>.</param>
36-
/// <returns>The configured, default <see cref="ApiVersion">API version</see>.</returns>
37-
/// <remarks>If the <paramref name="configuration"/> has not added API versioning, then this method
38-
/// always returns <see cref="ApiVersion.Default"/>.</remarks>
39-
public static ApiVersion GetDefaultApiVersion( this HttpConfiguration configuration )
40-
{
41-
Arg.NotNull( configuration, nameof( configuration ) );
42-
Contract.Ensures( Contract.Result<ApiVersion>() != null );
43-
44-
return configuration.GetApiVersioningOptions()?.DefaultApiVersion ?? ApiVersion.Default;
45-
}
46-
4720
/// <summary>
48-
/// Gets the configured service API version reader.
21+
/// Gets the current API versioning options.
4922
/// </summary>
5023
/// <param name="configuration">The current <see cref="HttpConfiguration">configuration</see>.</param>
51-
/// <returns>The configured <see cref="IApiVersionReader">API service reader</see>.</returns>
52-
/// <remarks>If the <paramref name="configuration"/> has not added API versioning, then this method
53-
/// always returns a new instance of the <see cref="QueryStringApiVersionReader"/>.</remarks>
54-
public static IApiVersionReader GetApiVersionReader( this HttpConfiguration configuration )
24+
/// <returns>The current <see cref="ApiVersioningOptions">API versioning options</see>.</returns>
25+
public static ApiVersioningOptions GetApiVersioningOptions( this HttpConfiguration configuration )
5526
{
5627
Arg.NotNull( configuration, nameof( configuration ) );
57-
Contract.Ensures( Contract.Result<IApiVersionReader>() != null );
28+
Contract.Ensures( Contract.Result<ApiVersioningOptions>() != null );
5829

59-
return configuration.GetApiVersioningOptions()?.ApiVersionReader ?? new QueryStringApiVersionReader();
30+
var options = default( ApiVersioningOptions );
31+
return configuration.Properties.TryGetValue( ApiVersioningOptionsKey, out options ) ? options : new ApiVersioningOptions();
6032
}
6133

6234
/// <summary>
@@ -91,4 +63,4 @@ public static void AddApiVersioning( this HttpConfiguration configuration, Actio
9163
configuration.Properties.AddOrUpdate( ApiVersioningOptionsKey, options, ( key, oldValue ) => options );
9264
}
9365
}
94-
}
66+
}

src/Microsoft.AspNet.WebApi.Versioning/System.Web.Http/HttpRequestMessageExtensions.cs

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,19 @@ internal static HttpResponseMessage CreateErrorResponse( this HttpRequestMessage
5858
} );
5959
}
6060

61+
/// <summary>
62+
/// Gets the current API versioning options.
63+
/// </summary>
64+
/// <param name="request">The <see cref="HttpRequestMessage">request</see> to get the API versioning options for.</param>
65+
/// <returns>The current <see cref="ApiVersioningOptions">API versioning options</see>.</returns>
66+
public static ApiVersioningOptions GetApiVersioningOptions( this HttpRequestMessage request )
67+
{
68+
Arg.NotNull( request, nameof( request ) );
69+
Contract.Ensures( Contract.Result<ApiVersioningOptions>() != null );
70+
71+
return request.GetConfiguration()?.GetApiVersioningOptions() ?? new ApiVersioningOptions();
72+
}
73+
6174
/// <summary>
6275
/// Gets the current raw, unparsed service API version requested.
6376
/// </summary>
@@ -70,7 +83,7 @@ public static string GetRawRequestedApiVersion( this HttpRequestMessage request
7083
{
7184
Arg.NotNull( request, nameof( request ) );
7285

73-
var reader = request.GetConfiguration()?.GetApiVersionReader() ?? new QueryStringApiVersionReader();
86+
var reader = request.GetApiVersioningOptions().ApiVersionReader;
7487
return reader.Read( request );
7588
}
7689

@@ -126,4 +139,4 @@ public static void SetRequestedApiVersion( this HttpRequestMessage request, ApiV
126139
}
127140
}
128141
}
129-
}
142+
}

src/Microsoft.AspNet.WebApi.Versioning/Versioning/ApiVersionModel.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ private static IReadOnlyList<ApiVersion> GetDeclaredControllerApiVersions( HttpC
9191

9292
if ( versions.Count == 0 )
9393
{
94-
versions = new[] { controllerDescriptor.Configuration.GetDefaultApiVersion() };
94+
versions = new[] { controllerDescriptor.Configuration.GetApiVersioningOptions().DefaultApiVersion };
9595
}
9696

9797
return versions;
@@ -110,7 +110,7 @@ private static IReadOnlyList<ApiVersion> GetSupportedControllerApiVersions( Http
110110

111111
if ( versions.Count == 0 )
112112
{
113-
versions = new[] { controllerDescriptor.Configuration.GetDefaultApiVersion() };
113+
versions = new[] { controllerDescriptor.Configuration.GetApiVersioningOptions().DefaultApiVersion };
114114
}
115115
else
116116
{

0 commit comments

Comments
 (0)