using Microsoft.AspNetCore.Http; using System.Linq; namespace NDB.Extensions.Swagger.ReverseProxy { public static class ReverseProxyHelper { public static (string host, string basePath, string scheme) GetUrlComponents(HttpRequest request) { var host = ExtractHost(request); var basePath = ExtractBasePath(request); var scheme = ExtractScheme(request); return (host, basePath, scheme); } private static string ExtractHost(HttpRequest request) { if (request.Headers.ContainsKey("X-Forwarded-Host")) return request.Headers["X-Forwarded-Host"].First(); return request.Host.Value; } private static string ExtractBasePath(HttpRequest request) { if (request.Headers.ContainsKey("X-Forwarded-PathBase")) return request.Headers["X-Forwarded-PathBase"].First(); return string.Empty; } private static string ExtractScheme(HttpRequest request) { return request.Headers["X-Forwarded-Proto"].FirstOrDefault() ?? request.Scheme; } } }