@@ -11,6 +11,7 @@ namespace Asp.Versioning.Routing;
1111internal sealed class ApiVersionPolicyJumpTable : PolicyJumpTable
1212{
1313 private readonly bool versionsByUrl ;
14+ private readonly bool versionsByUrlOnly ;
1415 private readonly bool versionsByMediaTypeOnly ;
1516 private readonly RouteDestination rejection ;
1617 private readonly IReadOnlyDictionary < ApiVersion , int > destinations ;
@@ -32,6 +33,7 @@ internal ApiVersionPolicyJumpTable(
3233 this . parser = parser ;
3334 this . options = options ;
3435 versionsByUrl = routePatterns . Count > 0 ;
36+ versionsByUrlOnly = source . VersionsByUrl ( allowMultipleLocations : false ) ;
3537 versionsByMediaTypeOnly = source . VersionsByMediaType ( allowMultipleLocations : false ) ;
3638 }
3739
@@ -61,15 +63,18 @@ public override int GetDestination( HttpContext httpContext )
6163 return destination ;
6264 }
6365
64- // 2. short-circuit if a default version cannot be assumed
65- if ( ! options . AssumeDefaultVersionWhenUnspecified )
66+ // 2. IApiVersionSelector cannot be used yet because there are no candidates that an
67+ // aggregated version model can be computed from to select the 'default' API version
68+ if ( options . AssumeDefaultVersionWhenUnspecified )
6669 {
67- return rejection . Unspecified ; // 400
70+ return rejection . AssumeDefault ;
6871 }
6972
70- // 3. IApiVersionSelector cannot be used yet because there are no candidates that an
71- // aggregated version model can be computed from to select the 'default' API version
72- return rejection . AssumeDefault ;
73+ // 3. unspecified
74+ return versionsByUrlOnly
75+ /* 404 */ ? rejection . Exit
76+ /* 400 */ : rejection . Unspecified ;
77+
7378 case 1 :
7479 rawApiVersion = apiVersions [ 0 ] ;
7580
0 commit comments