Skip to content

Commit 183743f

Browse files
committed
Fix handling for inert route parameters in MVC (#58246)
* Fix handling for ambient route parameters * Set default type earlier
1 parent 2816185 commit 183743f

File tree

2 files changed

+22
-0
lines changed

2 files changed

+22
-0
lines changed

src/OpenApi/src/Services/OpenApiDocumentService.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -409,6 +409,10 @@ private async Task<OpenApiResponse> GetResponseAsync(
409409
var targetType = parameter.Type == typeof(string) && parameter.ModelMetadata.ModelType != parameter.Type
410410
? parameter.ModelMetadata.ModelType
411411
: parameter.Type;
412+
// If the type is null, then we're dealing with an inert
413+
// route parameter that does not define a specific parameter type in the
414+
// route handler or in the response. In this case, we default to a string schema.
415+
targetType ??= typeof(string);
412416
var openApiParameter = new OpenApiParameter
413417
{
414418
Name = parameter.Name,

src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Services/OpenApiSchemaService/OpenApiSchemaService.ParameterSchemas.cs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -592,4 +592,22 @@ internal enum ItemStatus
592592
Approved = 1,
593593
Rejected = 2,
594594
}
595+
596+
[Fact]
597+
public async Task SupportsMvcActionWithAmbientRouteParameter()
598+
{
599+
// Arrange
600+
var action = CreateActionDescriptor(nameof(AmbientRouteParameter));
601+
602+
// Assert
603+
await VerifyOpenApiDocument(action, document =>
604+
{
605+
var operation = document.Paths["/api/with-ambient-route-param/{versionId}"].Operations[OperationType.Get];
606+
var parameter = Assert.Single(operation.Parameters);
607+
Assert.Equal("string", parameter.Schema.Type);
608+
});
609+
}
610+
611+
[Route("/api/with-ambient-route-param/{versionId}")]
612+
private void AmbientRouteParameter() { }
595613
}

0 commit comments

Comments
 (0)