Ocelot/src/Ocelot/Headers/Middleware/HttpHeadersTransformationMiddleware.cs
Tom Pallister d0eee70c46
Feature/transform headers (#204)
* New feature that lets a user do find and replace on an upstream header

* can transform downstream and upstream headers, not sure if interface is good

* can replace location header with placeholder

* added some syntax
2018-01-22 20:21:29 +00:00

42 lines
1.5 KiB
C#

using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Ocelot.Infrastructure.RequestData;
using Ocelot.Logging;
using Ocelot.Middleware;
namespace Ocelot.Headers.Middleware
{
public class HttpHeadersTransformationMiddleware : OcelotMiddleware
{
private readonly RequestDelegate _next;
private readonly IOcelotLogger _logger;
private readonly IHttpContextRequestHeaderReplacer _preReplacer;
private readonly IHttpResponseHeaderReplacer _postReplacer;
public HttpHeadersTransformationMiddleware(RequestDelegate next,
IOcelotLoggerFactory loggerFactory,
IRequestScopedDataRepository requestScopedDataRepository,
IHttpContextRequestHeaderReplacer preReplacer,
IHttpResponseHeaderReplacer postReplacer)
: base(requestScopedDataRepository)
{
_next = next;
_postReplacer = postReplacer;
_preReplacer = preReplacer;
_logger = loggerFactory.CreateLogger<HttpHeadersTransformationMiddleware>();
}
public async Task Invoke(HttpContext context)
{
var preFAndRs = this.DownstreamRoute.ReRoute.UpstreamHeadersFindAndReplace;
_preReplacer.Replace(context, preFAndRs);
await _next.Invoke(context);
var postFAndRs = this.DownstreamRoute.ReRoute.DownstreamHeadersFindAndReplace;
_postReplacer.Replace(HttpResponseMessage, postFAndRs);
}
}
}