From 532777f52314eb5d07ca8129a4ba67c580bf9f71 Mon Sep 17 00:00:00 2001 From: Stevan Freeborn <65925598+StevanFreeborn@users.noreply.github.com> Date: Sun, 14 Apr 2024 16:59:53 -0500 Subject: [PATCH] fix: add extension method for getting base url that checks for proxy headers --- src/Blog/Components/Utils/OpenGraph.razor | 4 ++-- src/Blog/Components/_Imports.razor | 1 + src/Blog/Extensions/HttpRequestExtensions.cs | 10 ++++++++++ src/Blog/Program.cs | 10 ++++------ 4 files changed, 17 insertions(+), 8 deletions(-) create mode 100644 src/Blog/Extensions/HttpRequestExtensions.cs diff --git a/src/Blog/Components/Utils/OpenGraph.razor b/src/Blog/Components/Utils/OpenGraph.razor index e5a622f..31d9cd7 100644 --- a/src/Blog/Components/Utils/OpenGraph.razor +++ b/src/Blog/Components/Utils/OpenGraph.razor @@ -34,7 +34,7 @@ return; } - BaseUrl = $"{HttpContextAccessor.HttpContext.Request.Scheme}://{HttpContextAccessor.HttpContext.Request.Host}"; + BaseUrl = HttpContextAccessor.HttpContext.Request.GetBaseUrl(); OpenGraphUrl = $"{BaseUrl}{HttpContextAccessor.HttpContext.Request.Path}"; } -} \ No newline at end of file +} diff --git a/src/Blog/Components/_Imports.razor b/src/Blog/Components/_Imports.razor index 13e1960..f4be435 100644 --- a/src/Blog/Components/_Imports.razor +++ b/src/Blog/Components/_Imports.razor @@ -7,5 +7,6 @@ @using Microsoft.AspNetCore.Components.Web.Virtualization @using Microsoft.JSInterop @using Blog +@using Blog.Extensions @using Blog.Components @using Blog.Components.Utils \ No newline at end of file diff --git a/src/Blog/Extensions/HttpRequestExtensions.cs b/src/Blog/Extensions/HttpRequestExtensions.cs new file mode 100644 index 0000000..c853bb1 --- /dev/null +++ b/src/Blog/Extensions/HttpRequestExtensions.cs @@ -0,0 +1,10 @@ +namespace Blog.Extensions; +public static class HttpRequestExtensions +{ + public static string GetBaseUrl(this HttpRequest request) + { + var scheme = request.Headers["X-Forwarded-Proto"].FirstOrDefault() ?? request.Scheme; + var host = request.Headers["X-Forwarded-Host"].FirstOrDefault() ?? request.Host.Value; + return $"{scheme}://{host}"; + } +} \ No newline at end of file diff --git a/src/Blog/Program.cs b/src/Blog/Program.cs index 86a62db..09895b7 100644 --- a/src/Blog/Program.cs +++ b/src/Blog/Program.cs @@ -1,3 +1,5 @@ +using Blog.Extensions; + var builder = WebApplication.CreateBuilder(args); builder.Services.ConfigureOptions(); @@ -25,12 +27,8 @@ app.UseStatusCodePagesWithRedirects("/Error/{0}"); app .MapGet("/rss", async (HttpContext context, IPostService postService) => { - var req = context.Request; - - var scheme = req.Headers["X-Forwarded-Proto"].FirstOrDefault() ?? req.Scheme; - var host = req.Headers["X-Forwarded-Host"].FirstOrDefault() ?? req.Host.Value; - - var url = $"{scheme}://{host}{req.PathBase}"; + var baseUrl = context.Request.GetBaseUrl(); + var url = $"{baseUrl}{context.Request.PathBase}"; var posts = await postService.GetPostsAsync();