mirror of
https://github.com/nsnail/Ocelot.git
synced 2025-06-17 17:43:21 +08:00
parent
69ca874239
commit
d186f0e1b6
@ -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()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user