diff --git a/EssentialCSharp.Web/Extensions/IServiceCollectionExtensions.cs b/EssentialCSharp.Web/Extensions/IServiceCollectionExtensions.cs index fecb7c4e..c8c12233 100644 --- a/EssentialCSharp.Web/Extensions/IServiceCollectionExtensions.cs +++ b/EssentialCSharp.Web/Extensions/IServiceCollectionExtensions.cs @@ -21,7 +21,7 @@ public static void AddTrustedForwardedHeaders(this IServiceCollection services, services.Configure(options => { options.ForwardedHeaders = - ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto; + ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto | ForwardedHeaders.XForwardedHost; options.ForwardLimit = 1; var trustedProxyCidrs = configuration diff --git a/EssentialCSharp.Web/Program.cs b/EssentialCSharp.Web/Program.cs index a16ca957..392ff6a5 100644 --- a/EssentialCSharp.Web/Program.cs +++ b/EssentialCSharp.Web/Program.cs @@ -137,6 +137,7 @@ private static void Main(string[] args) builder.Services.AddTrustedForwardedHeaders(builder.Configuration, builder.Environment); + ConfigurationManager configuration = builder.Configuration; string connectionString = builder.Configuration.GetConnectionString("EssentialCSharpWebContextConnection") ?? throw new InvalidOperationException("Connection string 'EssentialCSharpWebContextConnection' not found."); diff --git a/EssentialCSharp.Web/Views/Shared/_Layout.cshtml b/EssentialCSharp.Web/Views/Shared/_Layout.cshtml index 165a5969..fed33d01 100644 --- a/EssentialCSharp.Web/Views/Shared/_Layout.cshtml +++ b/EssentialCSharp.Web/Views/Shared/_Layout.cshtml @@ -19,11 +19,17 @@ const string imageUrl = "https://essentialcsharp.com/images/icon.png"; const string description = "Accelerate your development knowledge with C# expert Mark Michaelis and Benjamin Michaelis' free, online comprehensive C# tutorial and reference that is updated through C# 11.0"; string title = $"Essential C#{(string.IsNullOrEmpty(ViewBag.PageTitle) ? string.Empty : $": {ViewBag.PageTitle}")}"; + string canonicalPath = $"{Context.Request.PathBase}{Context.Request.Path}"; + if (string.IsNullOrEmpty(canonicalPath)) + { + canonicalPath = "/"; + } + string canonicalUrl = $"{Context.Request.Scheme}://{Context.Request.Host}{canonicalPath}"; } - + @@ -100,6 +106,7 @@ + @await RenderSectionAsync("HeadAppend", required: false)