Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 1cb0998

Browse files
author
Jijie Chen
committed
支持由代理软件设置的 Protocol 与 Hostname
1 parent 85a1aad commit 1cb0998

File tree

3 files changed

+18
-2
lines changed

3 files changed

+18
-2
lines changed
Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,30 @@
11
using Discussion.Core.Models.UserAvatar;
2+
using Microsoft.AspNetCore.Http;
23
using Microsoft.AspNetCore.Mvc;
34

45
namespace Discussion.Web.Services.UserManagement.Avatar.UrlGenerators
56
{
67
public class StorageFileAvatarUrlGenerator : IUserAvatarUrlGenerator<StorageFileAvatar>
78
{
89
private readonly IUrlHelper _urlHelper;
10+
private readonly IHttpContextAccessor _httpContextAccessor;
911

10-
public StorageFileAvatarUrlGenerator(IUrlHelper urlHelper)
12+
public StorageFileAvatarUrlGenerator(IUrlHelper urlHelper, IHttpContextAccessor httpContextAccessor)
1113
{
1214
_urlHelper = urlHelper;
15+
_httpContextAccessor = httpContextAccessor;
1316
}
1417

1518
public string GetUserAvatarUrl(StorageFileAvatar avatar)
1619
{
20+
var request = _httpContextAccessor.HttpContext.Request;
1721
// ReSharper disable Mvc.ActionNotResolved
1822
// ReSharper disable Mvc.ControllerNotResolved
1923
return _urlHelper.Action("DownloadFile",
2024
"Common",
2125
new {slug = avatar.StorageFileSlug},
22-
_urlHelper.ActionContext.HttpContext.Request.Scheme);
26+
request.Scheme,
27+
request.Host.ToString());
2328
}
2429
}
2530
}

src/Discussion.Web/Startup.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
using Discussion.Core.Logging;
2929
using Discussion.Core.Middleware;
3030
using Discussion.Core.Utilities;
31+
using Microsoft.AspNetCore.HttpOverrides;
3132

3233
namespace Discussion.Web
3334
{
@@ -57,6 +58,12 @@ private static void Main()
5758
// ConfigureServices is invoked before Configure
5859
public void ConfigureServices(IServiceCollection services)
5960
{
61+
services.Configure<ForwardedHeadersOptions>(options =>
62+
{
63+
options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto | ForwardedHeaders.XForwardedHost;
64+
options.KnownNetworks.Clear();
65+
options.KnownProxies.Clear();
66+
});
6067
services.AddLazySupport();
6168
services.AddLogging();
6269
services.AddSingleton(HtmlEncoder.Create(UnicodeRanges.BasicLatin, UnicodeRanges.CjkUnifiedIdeographs));
@@ -107,6 +114,7 @@ public void ConfigureServices(IServiceCollection services)
107114

108115
public void Configure(IApplicationBuilder app)
109116
{
117+
app.UseForwardedHeaders();
110118
app.UseTracingId();
111119
SetupGlobalExceptionHandling(app);
112120
SetupHttpsSupport(app);

test/Discussion.Web.Tests/Specs/Services/UserAvatarServiceSpecs.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,9 +80,12 @@ private static IUrlHelper CreateMockUrlHelper(string slug = null)
8080
private static IServiceProvider CreateServices(IUrlHelper urlHelper)
8181
{
8282
var services = new ServiceCollection();
83+
var mockAccessor = new Mock<IHttpContextAccessor>();
84+
mockAccessor.SetupGet(m => m.HttpContext).Returns(new DefaultHttpContext());
8385

8486
services.AddScoped(sp => urlHelper);
8587
services.AddSingleton<IAvatarUrlService, DispatchAvatarUrlService>();
88+
services.AddSingleton(mockAccessor.Object);
8689
services.AddScoped<IUserAvatarUrlGenerator<DefaultAvatar>, DefaultAvatarUrlGenerator>();
8790
services.AddScoped<IUserAvatarUrlGenerator<StorageFileAvatar>, StorageFileAvatarUrlGenerator>();
8891
services.AddScoped<IUserAvatarUrlGenerator<GravatarAvatar>, GravatarAvatarUrlGenerator>();

0 commit comments

Comments
 (0)