diff --git a/src/Ocelot/DownstreamRouteFinder/Middleware/DownstreamRouteFinderMiddleware.cs b/src/Ocelot/DownstreamRouteFinder/Middleware/DownstreamRouteFinderMiddleware.cs
index 7c8b12ed..c25c655c 100644
--- a/src/Ocelot/DownstreamRouteFinder/Middleware/DownstreamRouteFinderMiddleware.cs
+++ b/src/Ocelot/DownstreamRouteFinder/Middleware/DownstreamRouteFinderMiddleware.cs
@@ -21,7 +21,7 @@ namespace Ocelot.DownstreamRouteFinder.Middleware
}
public async Task Invoke(HttpContext context)
- {
+ {
var upstreamUrlPath = context.Request.Path.ToString();
var downstreamRoute = _downstreamRouteFinder.FindDownstreamRoute(upstreamUrlPath, context.Request.Method);
diff --git a/src/Ocelot/Headers/RemoveOutputHeaders.cs b/src/Ocelot/Headers/RemoveOutputHeaders.cs
index c683bd39..7a40534b 100644
--- a/src/Ocelot/Headers/RemoveOutputHeaders.cs
+++ b/src/Ocelot/Headers/RemoveOutputHeaders.cs
@@ -3,6 +3,8 @@ using Ocelot.Responses;
namespace Ocelot.Headers
{
+ using System;
+
public class RemoveOutputHeaders : IRemoveOutputHeaders
{
///
@@ -10,14 +12,13 @@ namespace Ocelot.Headers
/// in a given context such as transfer encoding chunked when ASP.NET is not
/// returning the response in this manner
///
- private readonly string[] _unsupportedHeaders =
+ private readonly string[] _unsupportedRequestHeaders =
{
"Transfer-Encoding"
};
-
public Response Remove(HttpResponseHeaders headers)
{
- foreach (var unsupported in _unsupportedHeaders)
+ foreach (var unsupported in _unsupportedRequestHeaders)
{
headers.Remove(unsupported);
}
diff --git a/src/Ocelot/Responder/HttpContextResponder.cs b/src/Ocelot/Responder/HttpContextResponder.cs
index abc9e834..cd989cbd 100644
--- a/src/Ocelot/Responder/HttpContextResponder.cs
+++ b/src/Ocelot/Responder/HttpContextResponder.cs
@@ -9,6 +9,8 @@ using Ocelot.Responses;
namespace Ocelot.Responder
{
+ using System.Collections.Generic;
+
///
/// Cannot unit test things in this class due to methods not being implemented
/// on .net concretes used for testing
@@ -28,12 +30,17 @@ namespace Ocelot.Responder
foreach (var httpResponseHeader in response.Headers)
{
- context.Response.Headers.Add(httpResponseHeader.Key, new StringValues(httpResponseHeader.Value.ToArray()));
+ AddHeaderIfDoesntExist(context, httpResponseHeader);
+ }
+
+ foreach (var httpResponseHeader in response.Content.Headers)
+ {
+ AddHeaderIfDoesntExist(context, httpResponseHeader);
}
var content = await response.Content.ReadAsStreamAsync();
- context.Response.Headers.Add("Content-Length", new[] { content.Length.ToString() });
+ AddHeaderIfDoesntExist(context, new KeyValuePair>("Content-Length", new []{ content.Length.ToString() }) );
context.Response.OnStarting(state =>
{
@@ -54,6 +61,14 @@ namespace Ocelot.Responder
return new OkResponse();
}
+ private static void AddHeaderIfDoesntExist(HttpContext context, KeyValuePair> httpResponseHeader)
+ {
+ if (!context.Response.Headers.ContainsKey(httpResponseHeader.Key))
+ {
+ context.Response.Headers.Add(httpResponseHeader.Key, new StringValues(httpResponseHeader.Value.ToArray()));
+ }
+ }
+
public async Task SetErrorResponseOnContext(HttpContext context, int statusCode)
{
context.Response.OnStarting(x =>
diff --git a/test/Ocelot.UnitTests/Headers/RemoveHeaders.cs b/test/Ocelot.UnitTests/Headers/RemoveHeadersTests.cs
similarity index 95%
rename from test/Ocelot.UnitTests/Headers/RemoveHeaders.cs
rename to test/Ocelot.UnitTests/Headers/RemoveHeadersTests.cs
index 784f89aa..7a7bd4cc 100644
--- a/test/Ocelot.UnitTests/Headers/RemoveHeaders.cs
+++ b/test/Ocelot.UnitTests/Headers/RemoveHeadersTests.cs
@@ -7,13 +7,13 @@ using Xunit;
namespace Ocelot.UnitTests.Headers
{
- public class RemoveHeaders
+ public class RemoveHeadersTests
{
private HttpResponseHeaders _headers;
private readonly Ocelot.Headers.RemoveOutputHeaders _removeOutputHeaders;
private Response _result;
- public RemoveHeaders()
+ public RemoveHeadersTests()
{
_removeOutputHeaders = new Ocelot.Headers.RemoveOutputHeaders();
}