broke request builder and requester up into seperate middleware

This commit is contained in:
TomPallister 2016-10-07 13:01:05 +01:00
parent 8688c1eb6f
commit 3685efec05
4 changed files with 65 additions and 7 deletions

View File

@ -0,0 +1,48 @@
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Ocelot.Library.Infrastructure.Repository;
using Ocelot.Library.Infrastructure.Requester;
using Ocelot.Library.Infrastructure.Responder;
namespace Ocelot.Library.Middleware
{
using Infrastructure.RequestBuilder;
public class HttpRequestBuilderMiddleware
{
private readonly RequestDelegate _next;
private readonly IHttpResponder _responder;
private readonly IScopedRequestDataRepository _scopedRequestDataRepository;
private readonly IRequestBuilder _requestBuilder;
public HttpRequestBuilderMiddleware(RequestDelegate next,
IHttpResponder responder,
IScopedRequestDataRepository scopedRequestDataRepository,
IRequestBuilder requestBuilder)
{
_next = next;
_responder = responder;
_scopedRequestDataRepository = scopedRequestDataRepository;
_requestBuilder = requestBuilder;
}
public async Task Invoke(HttpContext context)
{
var downstreamUrl = _scopedRequestDataRepository.Get<string>("DownstreamUrl");
if (downstreamUrl.IsError)
{
await _responder.CreateNotFoundResponse(context);
return;
}
var request = _requestBuilder
.Build(context.Request.Method, downstreamUrl.Data, context.Request.Body,
context.Request.Headers, context.Request.Cookies, context.Request.QueryString.Value, context.Request.ContentType);
_scopedRequestDataRepository.Add("Request", request);
await _next.Invoke(context);
}
}
}

View File

@ -0,0 +1,12 @@
using Microsoft.AspNetCore.Builder;
namespace Ocelot.Library.Middleware
{
public static class HttpRequestBuilderMiddlewareExtensions
{
public static IApplicationBuilder UseHttpRequestBuilderMiddleware(this IApplicationBuilder builder)
{
return builder.UseMiddleware<HttpRequestBuilderMiddleware>();
}
}
}

View File

@ -31,20 +31,16 @@ namespace Ocelot.Library.Middleware
public async Task Invoke(HttpContext context) public async Task Invoke(HttpContext context)
{ {
var downstreamUrl = _scopedRequestDataRepository.Get<string>("DownstreamUrl"); var request = _scopedRequestDataRepository.Get<Request>("Request");
if (downstreamUrl.IsError) if (request.IsError)
{ {
await _responder.CreateNotFoundResponse(context); await _responder.CreateNotFoundResponse(context);
return; return;
} }
var request = _requestBuilder
.Build(context.Request.Method, downstreamUrl.Data, context.Request.Body,
context.Request.Headers, context.Request.Cookies, context.Request.QueryString.Value, context.Request.ContentType);
var response = await _requester var response = await _requester
.GetResponse(request); .GetResponse(request.Data);
await _responder.CreateResponse(context, response); await _responder.CreateResponse(context, response);

View File

@ -62,6 +62,8 @@ namespace Ocelot
app.UserDownstreamUrlCreatorMiddleware(); app.UserDownstreamUrlCreatorMiddleware();
app.UseHttpRequestBuilderMiddleware();
app.UseHttpRequesterMiddleware(); app.UseHttpRequesterMiddleware();
} }
} }