Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
using System.Diagnostics.Contracts;
namespace System.Web.Http
namespace System.Web.Http
{
using Controllers;
using Diagnostics.CodeAnalysis;
Expand All @@ -9,9 +8,7 @@ namespace System.Web.Http
using Microsoft.Web.Http;
using Microsoft.Web.Http.Controllers;
using Microsoft.Web.Http.Dispatcher;
using Microsoft.Web.Http.Routing;
using Microsoft.Web.Http.Versioning;
using Routing;

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

private static ApiVersioningOptions GetApiVersioningOptions( this HttpConfiguration configuration )
{
Contract.Requires( configuration != null );

var options = default( ApiVersioningOptions );
configuration.Properties.TryGetValue( ApiVersioningOptionsKey, out options );
return options;
}

/// <summary>
/// Gets the configured, default service API version.
/// </summary>
/// <param name="configuration">The current <see cref="HttpConfiguration">configuration</see>.</param>
/// <returns>The configured, default <see cref="ApiVersion">API version</see>.</returns>
/// <remarks>If the <paramref name="configuration"/> has not added API versioning, then this method
/// always returns <see cref="ApiVersion.Default"/>.</remarks>
public static ApiVersion GetDefaultApiVersion( this HttpConfiguration configuration )
{
Arg.NotNull( configuration, nameof( configuration ) );
Contract.Ensures( Contract.Result<ApiVersion>() != null );

return configuration.GetApiVersioningOptions()?.DefaultApiVersion ?? ApiVersion.Default;
}

/// <summary>
/// Gets the configured service API version reader.
/// Gets the current API versioning options.
/// </summary>
/// <param name="configuration">The current <see cref="HttpConfiguration">configuration</see>.</param>
/// <returns>The configured <see cref="IApiVersionReader">API service reader</see>.</returns>
/// <remarks>If the <paramref name="configuration"/> has not added API versioning, then this method
/// always returns a new instance of the <see cref="QueryStringApiVersionReader"/>.</remarks>
public static IApiVersionReader GetApiVersionReader( this HttpConfiguration configuration )
/// <returns>The current <see cref="ApiVersioningOptions">API versioning options</see>.</returns>
public static ApiVersioningOptions GetApiVersioningOptions( this HttpConfiguration configuration )
{
Arg.NotNull( configuration, nameof( configuration ) );
Contract.Ensures( Contract.Result<IApiVersionReader>() != null );
Contract.Ensures( Contract.Result<ApiVersioningOptions>() != null );

return configuration.GetApiVersioningOptions()?.ApiVersionReader ?? new QueryStringApiVersionReader();
var options = default( ApiVersioningOptions );
return configuration.Properties.TryGetValue( ApiVersioningOptionsKey, out options ) ? options : new ApiVersioningOptions();
}

/// <summary>
Expand Down Expand Up @@ -91,4 +63,4 @@ public static void AddApiVersioning( this HttpConfiguration configuration, Actio
configuration.Properties.AddOrUpdate( ApiVersioningOptionsKey, options, ( key, oldValue ) => options );
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,19 @@ internal static HttpResponseMessage CreateErrorResponse( this HttpRequestMessage
} );
}

/// <summary>
/// Gets the current API versioning options.
/// </summary>
/// <param name="request">The <see cref="HttpRequestMessage">request</see> to get the API versioning options for.</param>
/// <returns>The current <see cref="ApiVersioningOptions">API versioning options</see>.</returns>
public static ApiVersioningOptions GetApiVersioningOptions( this HttpRequestMessage request )
{
Arg.NotNull( request, nameof( request ) );
Contract.Ensures( Contract.Result<ApiVersioningOptions>() != null );

return request.GetConfiguration()?.GetApiVersioningOptions() ?? new ApiVersioningOptions();
}

/// <summary>
/// Gets the current raw, unparsed service API version requested.
/// </summary>
Expand All @@ -70,7 +83,7 @@ public static string GetRawRequestedApiVersion( this HttpRequestMessage request
{
Arg.NotNull( request, nameof( request ) );

var reader = request.GetConfiguration()?.GetApiVersionReader() ?? new QueryStringApiVersionReader();
var reader = request.GetApiVersioningOptions().ApiVersionReader;
return reader.Read( request );
}

Expand Down Expand Up @@ -126,4 +139,4 @@ public static void SetRequestedApiVersion( this HttpRequestMessage request, ApiV
}
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ private static IReadOnlyList<ApiVersion> GetDeclaredControllerApiVersions( HttpC

if ( versions.Count == 0 )
{
versions = new[] { controllerDescriptor.Configuration.GetDefaultApiVersion() };
versions = new[] { controllerDescriptor.Configuration.GetApiVersioningOptions().DefaultApiVersion };
}

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

if ( versions.Count == 0 )
{
versions = new[] { controllerDescriptor.Configuration.GetDefaultApiVersion() };
versions = new[] { controllerDescriptor.Configuration.GetApiVersioningOptions().DefaultApiVersion };
}
else
{
Expand Down