mirror of
				https://github.com/nsnail/Ocelot.git
				synced 2025-11-04 14:10:50 +08:00 
			
		
		
		
	now returns response content headers
This commit is contained in:
		@@ -3,6 +3,8 @@ using Ocelot.Responses;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
namespace Ocelot.Headers
 | 
					namespace Ocelot.Headers
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					    using System;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public class RemoveOutputHeaders : IRemoveOutputHeaders
 | 
					    public class RemoveOutputHeaders : IRemoveOutputHeaders
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
@@ -10,14 +12,13 @@ namespace Ocelot.Headers
 | 
				
			|||||||
        /// in a given context such as transfer encoding chunked when ASP.NET is not
 | 
					        /// in a given context such as transfer encoding chunked when ASP.NET is not
 | 
				
			||||||
        /// returning the response in this manner
 | 
					        /// returning the response in this manner
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
        private readonly string[] _unsupportedHeaders = 
 | 
					        private readonly string[] _unsupportedRequestHeaders = 
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            "Transfer-Encoding"
 | 
					            "Transfer-Encoding"
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
 | 
					 | 
				
			||||||
        public Response Remove(HttpResponseHeaders headers)
 | 
					        public Response Remove(HttpResponseHeaders headers)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            foreach (var unsupported in _unsupportedHeaders)
 | 
					            foreach (var unsupported in _unsupportedRequestHeaders)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                headers.Remove(unsupported);
 | 
					                headers.Remove(unsupported);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,6 +9,8 @@ using Ocelot.Responses;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
namespace Ocelot.Responder
 | 
					namespace Ocelot.Responder
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					    using System.Collections.Generic;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /// <summary>
 | 
					    /// <summary>
 | 
				
			||||||
    /// Cannot unit test things in this class due to methods not being implemented
 | 
					    /// Cannot unit test things in this class due to methods not being implemented
 | 
				
			||||||
    /// on .net concretes used for testing
 | 
					    /// on .net concretes used for testing
 | 
				
			||||||
@@ -28,12 +30,17 @@ namespace Ocelot.Responder
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            foreach (var httpResponseHeader in response.Headers)
 | 
					            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();
 | 
					            var content = await response.Content.ReadAsStreamAsync();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            context.Response.Headers.Add("Content-Length", new[] { content.Length.ToString() });
 | 
					            AddHeaderIfDoesntExist(context, new KeyValuePair<string, IEnumerable<string>>("Content-Length", new []{ content.Length.ToString() }) );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            context.Response.OnStarting(state =>
 | 
					            context.Response.OnStarting(state =>
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -54,6 +61,14 @@ namespace Ocelot.Responder
 | 
				
			|||||||
            return new OkResponse();       
 | 
					            return new OkResponse();       
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        private static void AddHeaderIfDoesntExist(HttpContext context, KeyValuePair<string, IEnumerable<string>> httpResponseHeader)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            if (!context.Response.Headers.ContainsKey(httpResponseHeader.Key))
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                context.Response.Headers.Add(httpResponseHeader.Key, new StringValues(httpResponseHeader.Value.ToArray()));
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public async Task<Response> SetErrorResponseOnContext(HttpContext context, int statusCode)
 | 
					        public async Task<Response> SetErrorResponseOnContext(HttpContext context, int statusCode)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            context.Response.OnStarting(x =>
 | 
					            context.Response.OnStarting(x =>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,13 +7,13 @@ using Xunit;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
namespace Ocelot.UnitTests.Headers
 | 
					namespace Ocelot.UnitTests.Headers
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    public class RemoveHeaders
 | 
					    public class RemoveHeadersTests
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        private HttpResponseHeaders _headers;
 | 
					        private HttpResponseHeaders _headers;
 | 
				
			||||||
        private readonly Ocelot.Headers.RemoveOutputHeaders _removeOutputHeaders;
 | 
					        private readonly Ocelot.Headers.RemoveOutputHeaders _removeOutputHeaders;
 | 
				
			||||||
        private Response _result;
 | 
					        private Response _result;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public RemoveHeaders()
 | 
					        public RemoveHeadersTests()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            _removeOutputHeaders = new Ocelot.Headers.RemoveOutputHeaders();
 | 
					            _removeOutputHeaders = new Ocelot.Headers.RemoveOutputHeaders();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
		Reference in New Issue
	
	Block a user