Skip to content

Commit

Permalink
Checkpoint to fixes started in 2020-03
Browse files Browse the repository at this point in the history
  • Loading branch information
Chris Martinez authored and commonsensesoftware committed Oct 10, 2020
1 parent 8894e3a commit 604d84f
Show file tree
Hide file tree
Showing 7 changed files with 28 additions and 35 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,17 @@ protected virtual ApiParameterDescription NewCountParameter( ODataQueryOptionDes
return NewParameterDescription( GetName( Count ), description, typeof( bool ), defaultValue: false );
}

// REF: http://docs.oasis-open.org/odata/odata/v4.01/cs01/part2-url-conventions/odata-v4.01-cs01-part2-url-conventions.html#sec_SystemQueryOptions
static bool IsSupported( string httpMethod ) =>
httpMethod.ToUpperInvariant() switch
{
"GET" => true,
"PUT" => true,
"PATCH" => true,
"POST" => true,
_ => false,
};

string GetName( AllowedQueryOptions option )
{
#pragma warning disable CA1308 // Normalize strings to uppercase
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ public virtual void ApplyTo( ApiDescription apiDescription )
throw new ArgumentNullException( nameof( apiDescription ) );
}

if ( !IsSupported( apiDescription ) )
if ( !IsSupported( apiDescription.HttpMethod.Method ) )
{
return;
}
Expand Down Expand Up @@ -142,15 +142,5 @@ static ApiParameterDescription SetAction( ApiParameterDescription parameter, Api

return parameter;
}

static bool IsSupported( ApiDescription apiDescription )
{
return apiDescription.HttpMethod.Method.ToUpperInvariant() switch
{
"GET" => true,
"POST" => apiDescription.Operation()?.IsAction() == true,
_ => false,
};
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,7 @@ internal static bool IsAttributeRouted( this HttpActionDescriptor action ) =>

internal static T? GetProperty<T>( this HttpActionDescriptor action ) where T : class =>
action.Properties.TryGetValue( typeof( T ), out T value ) ? value : default;
#pragma warning restore CS8603 // Possible null reference return.

internal static void SetProperty<T>( this HttpActionDescriptor action, T value ) =>
action.Properties.AddOrUpdate( typeof( T ), value, ( key, oldValue ) => value );
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
using Microsoft.Web.Http;
using Microsoft.Web.Http.Versioning;
using System;
using System.Diagnostics.CodeAnalysis;
using System.Net;
using System.Net.Http;

Expand All @@ -12,6 +11,7 @@
/// </summary>
public static class HttpRequestMessageExtensions
{
const string RoutingContextKey = "MS_RoutingContext";
const string ApiVersionPropertiesKey = "MS_" + nameof( ApiVersionRequestProperties );

static HttpResponseMessage CreateErrorResponse( this HttpRequestMessage request, HttpStatusCode statusCode, Func<bool, HttpError> errorCreator )
Expand Down Expand Up @@ -83,7 +83,14 @@ public static ApiVersionRequestProperties ApiVersionProperties( this HttpRequest

if ( !request.Properties.TryGetValue( ApiVersionPropertiesKey, out ApiVersionRequestProperties properties ) )
{
var forceRouteConstraintEvaluation = !request.Properties.ContainsKey( RoutingContextKey );

request.Properties[ApiVersionPropertiesKey] = properties = new ApiVersionRequestProperties( request );

if ( forceRouteConstraintEvaluation )
{
request.GetConfiguration()?.Routes.GetRouteData( request );
}
}

return properties;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ public virtual void ApplyTo( ApiDescription apiDescription )
throw new ArgumentNullException( nameof( apiDescription ) );
}

if ( !IsSupported( apiDescription ) )
if ( !IsSupported( apiDescription.HttpMethod ) )
{
return;
}
Expand Down Expand Up @@ -152,15 +152,5 @@ static bool IsSingleResult( ApiDescription description, out Type? resultType )
resultType = responseType;
return true;
}

static bool IsSupported( ApiDescription apiDescription )
{
return apiDescription.HttpMethod.ToUpperInvariant() switch
{
"GET" => true,
"POST" => apiDescription.Operation()?.IsAction() == true,
_ => false,
};
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,14 +24,11 @@

public class ODataValidationSettingsConventionTest
{
[Theory]
[InlineData( "PUT" )]
[InlineData( "PATCH" )]
[InlineData( "DELETE" )]
public void apply_to_should_ignore_nonquery_and_nonaction_descriptions( string httpMethod )
[Fact]
public void apply_to_should_ignore_nonquery_and_nonaction_description()
{
// arrange
var description = NewApiDescription( httpMethod );
var description = NewApiDescription( "DELETE" );
var validationSettings = new ODataValidationSettings();
var settings = new TestODataQueryOptionSettings();
var convention = new ODataValidationSettingsConvention( validationSettings, settings );
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,14 +24,11 @@

public class ODataValidationSettingsConventionTest
{
[Theory]
[InlineData( "PUT" )]
[InlineData( "PATCH" )]
[InlineData( "DELETE" )]
public void apply_to_should_ignore_nonquery_and_nonaction_descriptions( string httpMethod )
[Fact]
public void apply_to_should_ignore_nonquery_and_nonaction_description()
{
// arrange
var description = NewApiDescription( httpMethod );
var description = NewApiDescription( "DELETE" );
var validationSettings = new ODataValidationSettings();
var settings = new TestODataQueryOptionSettings( typeof( object ) );
var convention = new ODataValidationSettingsConvention( validationSettings, settings );
Expand Down

0 comments on commit 604d84f

Please sign in to comment.