mirror of
https://github.com/nsnail/Ocelot.git
synced 2025-05-02 21:02:50 +08:00
42 lines
1.3 KiB
C#
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;
|
|
}
|
|
}
|
|
} |