diff --git a/src/Mvc/Mvc.Testing/src/Handlers/RedirectHandler.cs b/src/Mvc/Mvc.Testing/src/Handlers/RedirectHandler.cs index 9addd609ec..1be8dfa4fc 100644 --- a/src/Mvc/Mvc.Testing/src/Handlers/RedirectHandler.cs +++ b/src/Mvc/Mvc.Testing/src/Handlers/RedirectHandler.cs @@ -92,8 +92,8 @@ namespace Microsoft.AspNetCore.Mvc.Testing.Handlers { foreach (var header in originalRequestContent.Headers) { - contentCopy.Headers.Add(header.Key, header.Value); - newRequestContent.Headers.Add(header.Key, header.Value); + contentCopy.Headers.TryAddWithoutValidation(header.Key, header.Value); + newRequestContent.Headers.TryAddWithoutValidation(header.Key, header.Value); } } @@ -103,7 +103,7 @@ namespace Microsoft.AspNetCore.Mvc.Testing.Handlers { foreach (var header in originalRequestHeaders) { - newRequestHeaders.Add(header.Key, header.Value); + newRequestHeaders.TryAddWithoutValidation(header.Key, header.Value); } } diff --git a/src/Mvc/test/Mvc.FunctionalTests/TestingInfrastructureTests.cs b/src/Mvc/test/Mvc.FunctionalTests/TestingInfrastructureTests.cs index ec946e3d15..16552ef051 100644 --- a/src/Mvc/test/Mvc.FunctionalTests/TestingInfrastructureTests.cs +++ b/src/Mvc/test/Mvc.FunctionalTests/TestingInfrastructureTests.cs @@ -75,6 +75,29 @@ namespace Microsoft.AspNetCore.Mvc.FunctionalTests Assert.Equal(5, handlerResponse.Body); } + [Fact] + public async Task TestingInfrastructure_RedirectHandlerWorksWithInvalidRequestAndContentHeaders() + { + // Act + var request = new HttpRequestMessage(HttpMethod.Post, "Testing/RedirectHandler/2") + { + Content = new ObjectContent(new Number { Value = 5 }, new JsonMediaTypeFormatter()) + }; + request.Headers.Add("X-Pass-Thru", "Some-Value"); + Assert.True(request.Headers.TryAddWithoutValidation("X-Invalid-Request-Header", "Bearer 1234,5678")); + Assert.True(request.Content.Headers.TryAddWithoutValidation("X-Invalid-Content-Header", "Bearer 1234,5678")); + var response = await Client.SendAsync(request); + + // Assert + Assert.Equal(HttpStatusCode.OK, response.StatusCode); + var xPassThruValue = Assert.Single(response.Headers.GetValues("X-Pass-Thru")); + Assert.Equal("Some-Value", xPassThruValue); + + var handlerResponse = await response.Content.ReadAsAsync(); + Assert.Equal(5, handlerResponse.Url); + Assert.Equal(5, handlerResponse.Body); + } + [Fact] public async Task TestingInfrastructure_RedirectHandlerUsesOriginalRequestHeaders() {