diff --git a/src/Mvc/Mvc.ApiExplorer/src/EndpointMetadataApiDescriptionProvider.cs b/src/Mvc/Mvc.ApiExplorer/src/EndpointMetadataApiDescriptionProvider.cs index 5e0710a13c3f..ccb9ab7e74eb 100644 --- a/src/Mvc/Mvc.ApiExplorer/src/EndpointMetadataApiDescriptionProvider.cs +++ b/src/Mvc/Mvc.ApiExplorer/src/EndpointMetadataApiDescriptionProvider.cs @@ -104,6 +104,11 @@ private ApiDescription CreateApiDescription(RouteEndpoint routeEndpoint, string { var parameterDescription = CreateApiParameterDescription(parameter, routeEndpoint.RoutePattern); + if (parameterDescription is null) + { + continue; + } + if (parameterDescription.Source == BindingSource.Body) { hasJsonBody = true; @@ -118,10 +123,16 @@ private ApiDescription CreateApiDescription(RouteEndpoint routeEndpoint, string return apiDescription; } - private ApiParameterDescription CreateApiParameterDescription(ParameterInfo parameter, RoutePattern pattern) + private ApiParameterDescription? CreateApiParameterDescription(ParameterInfo parameter, RoutePattern pattern) { var (source, name) = GetBindingSourceAndName(parameter, pattern); + // Services are ignored because they are not request parameters. + if (source == BindingSource.Services) + { + return null; + } + return new ApiParameterDescription { Name = name, diff --git a/src/Mvc/Mvc.ApiExplorer/test/EndpointMetadataApiDescriptionProviderTest.cs b/src/Mvc/Mvc.ApiExplorer/test/EndpointMetadataApiDescriptionProviderTest.cs index cd39f51ca3b0..093543d8b93f 100644 --- a/src/Mvc/Mvc.ApiExplorer/test/EndpointMetadataApiDescriptionProviderTest.cs +++ b/src/Mvc/Mvc.ApiExplorer/test/EndpointMetadataApiDescriptionProviderTest.cs @@ -248,20 +248,12 @@ public void AddsFromHeaderParameterAsHeader() } [Fact] - public void AddsFromServiceParameterAsService() + public void DoesNotAddFromServiceParameterAsService() { - static void AssertServiceParameter(ApiDescription apiDescription, Type expectedType) - { - var param = Assert.Single(apiDescription.ParameterDescriptions); - Assert.Equal(expectedType, param.Type); - Assert.Equal(expectedType, param.ModelMetadata.ModelType); - Assert.Equal(BindingSource.Services, param.Source); - } - - AssertServiceParameter(GetApiDescription((IInferredServiceInterface foo) => { }), typeof(IInferredServiceInterface)); - AssertServiceParameter(GetApiDescription(([FromServices] int foo) => { }), typeof(int)); - AssertServiceParameter(GetApiDescription((HttpContext context) => { }), typeof(HttpContext)); - AssertServiceParameter(GetApiDescription((CancellationToken token) => { }), typeof(CancellationToken)); + Assert.Empty(GetApiDescription((IInferredServiceInterface foo) => { }).ParameterDescriptions); + Assert.Empty(GetApiDescription(([FromServices] int foo) => { }).ParameterDescriptions); + Assert.Empty(GetApiDescription((HttpContext context) => { }).ParameterDescriptions); + Assert.Empty(GetApiDescription((CancellationToken token) => { }).ParameterDescriptions); } [Fact]