Override IIS headers in inproc (#1409)

This commit is contained in:
Pavel Krymets 2018-09-20 09:21:34 -07:00 committed by GitHub
parent b08b237927
commit d28468ca8f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 23 additions and 16 deletions

View File

@ -318,29 +318,23 @@ namespace Microsoft.AspNetCore.Server.IIS.Core
{
var headerValues = headerPair.Value;
var knownHeaderIndex = HttpApiTypes.HTTP_RESPONSE_HEADER_ID.IndexOfKnownHeader(headerPair.Key);
if (knownHeaderIndex == -1)
for (var i = 0; i < headerValues.Count; i++)
{
var headerNameBytes = Encoding.UTF8.GetBytes(headerPair.Key);
for (var i = 0; i < headerValues.Count; i++)
var isFirst = i == 0;
var headerValueBytes = Encoding.UTF8.GetBytes(headerValues[i]);
fixed (byte* pHeaderValue = headerValueBytes)
{
var headerValueBytes = Encoding.UTF8.GetBytes(headerValues[i]);
fixed (byte* pHeaderName = headerNameBytes)
if (knownHeaderIndex == -1)
{
fixed (byte* pHeaderValue = headerValueBytes)
var headerNameBytes = Encoding.UTF8.GetBytes(headerPair.Key);
fixed (byte* pHeaderName = headerNameBytes)
{
NativeMethods.HttpResponseSetUnknownHeader(_pInProcessHandler, pHeaderName, pHeaderValue, (ushort)headerValueBytes.Length, fReplace: false);
NativeMethods.HttpResponseSetUnknownHeader(_pInProcessHandler, pHeaderName, pHeaderValue, (ushort)headerValueBytes.Length, fReplace: isFirst);
}
}
}
}
else
{
for (var i = 0; i < headerValues.Count; i++)
{
var headerValueBytes = Encoding.UTF8.GetBytes(headerValues[i]);
fixed (byte* pHeaderValue = headerValueBytes)
else
{
NativeMethods.HttpResponseSetKnownHeader(_pInProcessHandler, knownHeaderIndex, pHeaderValue, (ushort)headerValueBytes.Length, fReplace: false);
NativeMethods.HttpResponseSetKnownHeader(_pInProcessHandler, knownHeaderIndex, pHeaderValue, (ushort)headerValueBytes.Length, fReplace: isFirst);
}
}
}

View File

@ -74,5 +74,12 @@ namespace Microsoft.AspNetCore.Server.IISIntegration.FunctionalTests
// ReadAsStringAsync returns empty string for empty results
Assert.Equal(body ?? string.Empty, await response.Content.ReadAsStringAsync());
}
[ConditionalFact]
public async Task ServerHeaderIsOverriden()
{
var response = await _fixture.Client.GetAsync("OverrideServer");
Assert.Equal("MyServer/7.8", response.Headers.Server.Single().Product.ToString());
}
}
}

View File

@ -82,5 +82,11 @@ namespace TestSite
}
await context.Response.WriteAsync(_applicationInitializationCalled.ToString());
}
public Task OverrideServer(HttpContext context)
{
context.Response.Headers["Server"] = "MyServer/7.8";
return Task.CompletedTask;
}
}
}