mirror of
				https://github.com/nsnail/Ocelot.git
				synced 2025-11-04 13:30:49 +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