mirror of
https://github.com/nsnail/Ocelot.git
synced 2025-07-07 19:47:15 +08:00
made a response middlware as terminating middleware...
This commit is contained in:
@ -36,7 +36,7 @@ namespace Ocelot.Library.Middleware
|
||||
return;
|
||||
}
|
||||
|
||||
var request = _requestBuilder
|
||||
var request = await _requestBuilder
|
||||
.Build(context.Request.Method, downstreamUrl.Data, context.Request.Body,
|
||||
context.Request.Headers, context.Request.Cookies, context.Request.QueryString.Value, context.Request.ContentType);
|
||||
|
||||
|
@ -1,3 +1,4 @@
|
||||
using System.Net.Http;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Ocelot.Library.Infrastructure.Repository;
|
||||
@ -14,19 +15,16 @@ namespace Ocelot.Library.Middleware
|
||||
private readonly IHttpRequester _requester;
|
||||
private readonly IHttpResponder _responder;
|
||||
private readonly IScopedRequestDataRepository _scopedRequestDataRepository;
|
||||
private readonly IRequestBuilder _requestBuilder;
|
||||
|
||||
public HttpRequesterMiddleware(RequestDelegate next,
|
||||
IHttpRequester requester,
|
||||
IHttpResponder responder,
|
||||
IScopedRequestDataRepository scopedRequestDataRepository,
|
||||
IRequestBuilder requestBuilder)
|
||||
IScopedRequestDataRepository scopedRequestDataRepository)
|
||||
{
|
||||
_next = next;
|
||||
_requester = requester;
|
||||
_responder = responder;
|
||||
_scopedRequestDataRepository = scopedRequestDataRepository;
|
||||
_requestBuilder = requestBuilder;
|
||||
}
|
||||
|
||||
public async Task Invoke(HttpContext context)
|
||||
@ -42,8 +40,8 @@ namespace Ocelot.Library.Middleware
|
||||
var response = await _requester
|
||||
.GetResponse(request.Data);
|
||||
|
||||
await _responder.CreateResponse(context, response);
|
||||
|
||||
_scopedRequestDataRepository.Add("Response", response.Data);
|
||||
|
||||
await _next.Invoke(context);
|
||||
}
|
||||
}
|
||||
|
34
src/Ocelot.Library/Middleware/HttpResponderMiddleware.cs
Normal file
34
src/Ocelot.Library/Middleware/HttpResponderMiddleware.cs
Normal file
@ -0,0 +1,34 @@
|
||||
using System.Net.Http;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Ocelot.Library.Infrastructure.Repository;
|
||||
using Ocelot.Library.Infrastructure.Responder;
|
||||
|
||||
namespace Ocelot.Library.Middleware
|
||||
{
|
||||
/// <summary>
|
||||
/// Terminating middleware that is responsible for returning a http response to the client
|
||||
/// </summary>
|
||||
public class HttpResponderMiddleware
|
||||
{
|
||||
private readonly RequestDelegate _next;
|
||||
private readonly IHttpResponder _responder;
|
||||
private readonly IScopedRequestDataRepository _scopedRequestDataRepository;
|
||||
|
||||
public HttpResponderMiddleware(RequestDelegate next,
|
||||
IHttpResponder responder,
|
||||
IScopedRequestDataRepository scopedRequestDataRepository)
|
||||
{
|
||||
_next = next;
|
||||
_responder = responder;
|
||||
_scopedRequestDataRepository = scopedRequestDataRepository;
|
||||
}
|
||||
|
||||
public async Task Invoke(HttpContext context)
|
||||
{
|
||||
var response = _scopedRequestDataRepository.Get<HttpResponseMessage>("Response");
|
||||
|
||||
await _responder.CreateResponse(context, response.Data);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
using Microsoft.AspNetCore.Builder;
|
||||
|
||||
namespace Ocelot.Library.Middleware
|
||||
{
|
||||
public static class HttpResponderMiddlewareExtensions
|
||||
{
|
||||
public static IApplicationBuilder UseHttpResponderMiddleware(this IApplicationBuilder builder)
|
||||
{
|
||||
return builder.UseMiddleware<HttpResponderMiddleware>();
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user