C# 检查网站用户是否在本地网络上。ASP.NET核心MVC
我已经用.net核心MVC制作了一个网站。我的目标是尝试隐藏一些功能,无论用户是否在本地网络上 我在docker for windows上托管的linux容器中运行我的网站。目前,每个到达该站点的用户都有ip“::ffff:172.17.0.1”。这最初使网站抛出了一个错误。我现在已经放置了一些错误处理,因此不会抛出 上述问题是因为每个用户都有ip:'::ffff:172.17.0.1'。所有用户都显示为本地网络上的用户,而不是本地网络上的用户 我已经将它放在C# 检查网站用户是否在本地网络上。ASP.NET核心MVC,c#,asp.net-mvc,docker,asp.net-core,C#,Asp.net Mvc,Docker,Asp.net Core,我已经用.net核心MVC制作了一个网站。我的目标是尝试隐藏一些功能,无论用户是否在本地网络上 我在docker for windows上托管的linux容器中运行我的网站。目前,每个到达该站点的用户都有ip“::ffff:172.17.0.1”。这最初使网站抛出了一个错误。我现在已经放置了一些错误处理,因此不会抛出 上述问题是因为每个用户都有ip:'::ffff:172.17.0.1'。所有用户都显示为本地网络上的用户,而不是本地网络上的用户 我已经将它放在configure方法中的start
configure
方法中的startup.cs
文件中
app.UseForwardedHeaders(new ForwardedHeadersOptions
{
ForwardedHeaders = ForwardedHeaders.XForwardedFor |
ForwardedHeaders.XForwardedProto
});
这是我检查用户是否在本地网络上的方法:
var remoteIpAddress = context.Connection.RemoteIpAddress;
var networkDetails = new UserNetworkInfomation();
if (remoteIpAddress == null)
return networkDetails;
var isLocalNetwork = remoteIpAddress.AddressFamily == AddressFamily.InterNetworkV6;
try
{
var userIpAddress = isLocalNetwork ? GetHostPublicIP() : $"{remoteIpAddress}";
_logger.LogInformation($"User({remoteIpAddress}) on local network: {isLocalNetwork}");
networkDetails.IpAddress = userIpAddress;
networkDetails.IsLocalNetwork = isLocalNetwork;
}
catch (Exception ex)
{
_logger.LogError(ex, ex.Message);
}
return networkDetails;
传递到上述方法中的上下文来自HomeController
:
public IActionResult Index()
{
var userNetworkInfomation = _networkChecker.IsLocal(HttpContext);
return View(userNetworkInfomation);
}
有人知道我在检查用户是否在本地网络上时做错了什么吗?谢谢:)@DavidTansey这似乎与linux有关,而不是与docker for windows有关,后者是linux容器