diff --git a/src/Http/Http.Extensions/gen/StaticRouteHandlerModel/EndpointParameter.cs b/src/Http/Http.Extensions/gen/StaticRouteHandlerModel/EndpointParameter.cs index 19d861817a26..0f6a01c6cde1 100644 --- a/src/Http/Http.Extensions/gen/StaticRouteHandlerModel/EndpointParameter.cs +++ b/src/Http/Http.Extensions/gen/StaticRouteHandlerModel/EndpointParameter.cs @@ -48,6 +48,8 @@ public EndpointParameter(IParameterSymbol parameter, WellKnownTypes wellKnownTyp Source = EndpointParameterSource.Header; Name = GetParameterName(fromHeaderAttribute, parameter.Name); IsOptional = parameter.IsOptional(); + IsParsable = TryGetParsability(parameter, wellKnownTypes, out var parsingBlockEmitter); + ParsingBlockEmitter = parsingBlockEmitter; } else if (TryGetExplicitFromJsonBody(parameter, wellKnownTypes, out var isOptional)) { diff --git a/src/Http/Http.Extensions/test/RequestDelegateGenerator/RequestDelegateGeneratorTests.cs b/src/Http/Http.Extensions/test/RequestDelegateGenerator/RequestDelegateGeneratorTests.cs index dc5441e88851..ccab68ace9fb 100644 --- a/src/Http/Http.Extensions/test/RequestDelegateGenerator/RequestDelegateGeneratorTests.cs +++ b/src/Http/Http.Extensions/test/RequestDelegateGenerator/RequestDelegateGeneratorTests.cs @@ -218,6 +218,25 @@ public async Task MapAction_TryParsableExplicitRouteParameters(string typeName, Assert.Equal(expectedParameterValue, httpContext.Items["tryParsable"]); } + [Theory] + [MemberData(nameof(TryParsableParameters))] + public async Task MapAction_TryParsableExplicitHeaderParameters(string typeName, string headerValue, object expectedParameterValue) + { + var (results, compilation) = await RunGeneratorAsync($$""" +app.MapGet("/", (HttpContext context, [FromHeader]{{typeName}} headerValue) => +{ + context.Items["tryParsable"] = headerValue; +}); +"""); + var endpoint = GetEndpointFromCompilation(compilation); + var httpContext = CreateHttpContext(); + httpContext.Request.Headers["headerValue"] = headerValue; + + await endpoint.RequestDelegate(httpContext); + Assert.Equal(200, httpContext.Response.StatusCode); + Assert.Equal(expectedParameterValue, httpContext.Items["tryParsable"]); + } + [Theory] [MemberData(nameof(TryParsableParameters))] public async Task MapAction_SingleParsable_StringReturn(string typeName, string queryStringInput, object expectedParameterValue)