IIS - Skip setting a header if the value is empty #11032 (#12486)

This commit is contained in:
Harley Adams 2019-07-25 14:39:52 -07:00 committed by Chris Ross
parent 648bdf706e
commit a07ad16e4d
3 changed files with 26 additions and 0 deletions

View File

@ -373,9 +373,20 @@ namespace Microsoft.AspNetCore.Server.IIS.Core
foreach (var headerPair in HttpResponseHeaders)
{
var headerValues = headerPair.Value;
if (headerPair.Value.Count == 0)
{
continue;
}
var knownHeaderIndex = HttpApiTypes.HTTP_RESPONSE_HEADER_ID.IndexOfKnownHeader(headerPair.Key);
for (var i = 0; i < headerValues.Count; i++)
{
if (string.IsNullOrEmpty(headerValues[i]))
{
continue;
}
var isFirst = i == 0;
var headerValueBytes = Encoding.UTF8.GetBytes(headerValues[i]);
fixed (byte* pHeaderValue = headerValueBytes)

View File

@ -22,6 +22,15 @@ namespace Microsoft.AspNetCore.Server.IIS.FunctionalTests.InProcess
_fixture = fixture;
}
[ConditionalFact]
public async Task AddEmptyHeaderSkipped()
{
var response = await _fixture.Client.GetAsync("ResponseEmptyHeaders");
var responseText = await response.Content.ReadAsStringAsync();
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
Assert.False(response.Headers.TryGetValues("EmptyHeader", out var headerValues));
}
[ConditionalFact]
public async Task AddResponseHeaders_HeaderValuesAreSetCorrectly()
{

View File

@ -379,6 +379,12 @@ namespace TestSite
await ctx.Response.WriteAsync("Request Complete");
}
private async Task ResponseEmptyHeaders(HttpContext ctx)
{
ctx.Response.Headers["EmptyHeader"] = "";
await ctx.Response.WriteAsync("EmptyHeaderShouldBeSkipped");
}
private async Task ResponseInvalidOrdering(HttpContext ctx)
{
if (ctx.Request.Path.Equals("/SetStatusCodeAfterWrite"))