首页 > 解决方案 > 检查网站用户是否在本地网络上。ASP.NET 核心 MVC

问题描述

我在 .net core MVC 中创建了一个网站。我的目标是尝试让一些功能隐藏在用户是否在本地网络上。

我在 docker for windows 上托管的 linux 容器中运行我的网站。目前,到达该站点的每个用户都有 ip '::ffff:172.17.0.1'。这最初使网站抛出错误。我现在已经进行了一些错误处理,所以这不会抛出。

上述问题是因为每个用户都拥有 ip:'::ffff:172.17.0.1'。所有用户都显示为在本地网络上,而实际上并非如此。

我已经把它放在我的startup.cs文件中的configure方法中

  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;

context传入上述方法的来自HomeController

public IActionResult Index()
{
    var userNetworkInfomation = _networkChecker.IsLocal(HttpContext);
    return View(userNetworkInfomation);
}

任何人都知道我在检查用户是否在本地网络上做错了什么?谢谢 :)

标签: c#asp.net-mvcdockerasp.net-core

解决方案


推荐阅读