mirror of
				https://github.com/nsnail/Ocelot.git
				synced 2025-10-31 23:05:26 +08:00 
			
		
		
		
	broke request builder and requester up into seperate middleware
This commit is contained in:
		| @@ -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) | ||||
|         { | ||||
|             var downstreamUrl = _scopedRequestDataRepository.Get<string>("DownstreamUrl"); | ||||
|             var request = _scopedRequestDataRepository.Get<Request>("Request"); | ||||
|  | ||||
|             if (downstreamUrl.IsError) | ||||
|             if (request.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); | ||||
|  | ||||
|             var response = await _requester | ||||
|                 .GetResponse(request); | ||||
|                 .GetResponse(request.Data); | ||||
|  | ||||
|             await _responder.CreateResponse(context, response); | ||||
|  | ||||
|   | ||||
| @@ -62,6 +62,8 @@ namespace Ocelot | ||||
|  | ||||
|             app.UserDownstreamUrlCreatorMiddleware(); | ||||
|  | ||||
|             app.UseHttpRequestBuilderMiddleware(); | ||||
|  | ||||
|             app.UseHttpRequesterMiddleware(); | ||||
|         } | ||||
|     } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 TomPallister
					TomPallister