mirror of
				https://github.com/nsnail/Ocelot.git
				synced 2025-11-04 22:30:50 +08:00 
			
		
		
		
	@@ -7,6 +7,6 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    public interface IRequestMapper
 | 
					    public interface IRequestMapper
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        Response<HttpRequestMessage> Map(HttpRequest request);
 | 
					        Task<Response<HttpRequestMessage>> Map(HttpRequest request);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,13 +15,13 @@
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
        private readonly string[] _unsupportedHeaders = { "host" };
 | 
					        private readonly string[] _unsupportedHeaders = { "host" };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public Response<HttpRequestMessage> Map(HttpRequest request)
 | 
					        public async Task<Response<HttpRequestMessage>> Map(HttpRequest request)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            try
 | 
					            try
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                var requestMessage = new HttpRequestMessage()
 | 
					                var requestMessage = new HttpRequestMessage()
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    Content = MapContent(request),
 | 
					                    Content = await MapContent(request),
 | 
				
			||||||
                    Method = MapMethod(request),
 | 
					                    Method = MapMethod(request),
 | 
				
			||||||
                    RequestUri = MapUri(request)
 | 
					                    RequestUri = MapUri(request)
 | 
				
			||||||
                };
 | 
					                };
 | 
				
			||||||
@@ -36,14 +36,15 @@
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        private HttpContent MapContent(HttpRequest request)
 | 
					        private async Task<HttpContent> MapContent(HttpRequest request)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            if (request.Body == null || (request.Body.CanSeek && request.Body.Length <= 0)) 
 | 
					            if (request.Body == null || (request.Body.CanSeek && request.Body.Length <= 0)) 
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                return null;
 | 
					                return null;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var content = new StreamContent(request.Body);
 | 
					            // Never change this to StreamContent again, I forgot it doesnt work in #464.
 | 
				
			||||||
 | 
					            var content = new ByteArrayContent(await ToByteArray(request.Body));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if(!string.IsNullOrEmpty(request.ContentType))
 | 
					            if(!string.IsNullOrEmpty(request.ContentType))
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -95,5 +96,17 @@
 | 
				
			|||||||
        {
 | 
					        {
 | 
				
			||||||
            return !_unsupportedHeaders.Contains(header.Key.ToLower());
 | 
					            return !_unsupportedHeaders.Contains(header.Key.ToLower());
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        private async Task<byte[]> ToByteArray(Stream stream)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            using(stream)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                using (var memStream = new MemoryStream())
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    await stream.CopyToAsync(memStream);
 | 
				
			||||||
 | 
					                    return memStream.ToArray();
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,7 +27,7 @@ namespace Ocelot.Request.Middleware
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        public async Task Invoke(DownstreamContext context)
 | 
					        public async Task Invoke(DownstreamContext context)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            var downstreamRequest = _requestMapper.Map(context.HttpContext.Request);
 | 
					            var downstreamRequest = await _requestMapper.Map(context.HttpContext.Request);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (downstreamRequest.IsError)
 | 
					            if (downstreamRequest.IsError)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -95,7 +95,7 @@ namespace Ocelot.UnitTests.Request
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            _requestMapper
 | 
					            _requestMapper
 | 
				
			||||||
                .Setup(rm => rm.Map(It.IsAny<HttpRequest>()))
 | 
					                .Setup(rm => rm.Map(It.IsAny<HttpRequest>()))
 | 
				
			||||||
                .Returns(_mappedRequest);
 | 
					                .ReturnsAsync(_mappedRequest);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        private void GivenTheMapperWillReturnAnError()
 | 
					        private void GivenTheMapperWillReturnAnError()
 | 
				
			||||||
@@ -104,7 +104,7 @@ namespace Ocelot.UnitTests.Request
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            _requestMapper
 | 
					            _requestMapper
 | 
				
			||||||
                .Setup(rm => rm.Map(It.IsAny<HttpRequest>()))
 | 
					                .Setup(rm => rm.Map(It.IsAny<HttpRequest>()))
 | 
				
			||||||
                .Returns(_mappedRequest);
 | 
					                .ReturnsAsync(_mappedRequest);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        private void WhenTheMiddlewareIsInvoked()
 | 
					        private void WhenTheMiddlewareIsInvoked()
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -16,6 +16,7 @@
 | 
				
			|||||||
    using System.IO;
 | 
					    using System.IO;
 | 
				
			||||||
    using System.Text;
 | 
					    using System.Text;
 | 
				
			||||||
    using System.Security.Cryptography;
 | 
					    using System.Security.Cryptography;
 | 
				
			||||||
 | 
					    using System.Threading.Tasks;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public class RequestMapperTests
 | 
					    public class RequestMapperTests
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
@@ -378,9 +379,9 @@
 | 
				
			|||||||
            _inputRequest.Body = null;
 | 
					            _inputRequest.Body = null;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        private void WhenMapped()
 | 
					        private async Task WhenMapped()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            _mappedRequest = _requestMapper.Map(_inputRequest);
 | 
					            _mappedRequest = await _requestMapper.Map(_inputRequest);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        private void ThenNoErrorIsReturned()
 | 
					        private void ThenNoErrorIsReturned()
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user