Ocelot/src/Ocelot.Library/Middleware/DownstreamUrlCreatorMiddleware.cs

42 lines
1.3 KiB
C#

using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Ocelot.Library.Infrastructure.DownstreamRouteFinder;
using Ocelot.Library.Infrastructure.UrlTemplateReplacer;
namespace Ocelot.Library.Middleware
{
public class DownstreamUrlCreatorMiddleware
{
private readonly RequestDelegate _next;
private readonly IDownstreamUrlTemplateVariableReplacer _urlReplacer;
public DownstreamUrlCreatorMiddleware(RequestDelegate next,
IDownstreamUrlTemplateVariableReplacer urlReplacer)
{
_next = next;
_urlReplacer = urlReplacer;
}
public async Task Invoke(HttpContext context)
{
var downstreamRoute = GetDownstreamRouteFromOwinItems(context);
var downstreamUrl = _urlReplacer.ReplaceTemplateVariables(downstreamRoute);
context.Items.Add("DownstreamUrl", downstreamUrl);
await _next.Invoke(context);
}
private DownstreamRoute GetDownstreamRouteFromOwinItems(HttpContext context)
{
object obj;
DownstreamRoute downstreamRoute = null;
if (context.Items.TryGetValue("DownstreamRoute", out obj))
{
downstreamRoute = (DownstreamRoute) obj;
}
return downstreamRoute;
}
}
}