mirror of
https://github.com/nsnail/Ocelot.git
synced 2025-04-22 06:42:50 +08:00
broke request builder and requester up into seperate middleware
This commit is contained in:
parent
8688c1eb6f
commit
3685efec05
@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -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>();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -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);
|
||||||
|
|
||||||
|
@ -62,6 +62,8 @@ namespace Ocelot
|
|||||||
|
|
||||||
app.UserDownstreamUrlCreatorMiddleware();
|
app.UserDownstreamUrlCreatorMiddleware();
|
||||||
|
|
||||||
|
app.UseHttpRequestBuilderMiddleware();
|
||||||
|
|
||||||
app.UseHttpRequesterMiddleware();
|
app.UseHttpRequesterMiddleware();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user