Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 检查网站用户是否在本地网络上。ASP.NET核心MVC_C#_Asp.net Mvc_Docker_Asp.net Core - Fatal编程技术网

C# 检查网站用户是否在本地网络上。ASP.NET核心MVC

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

我已经用.net核心MVC制作了一个网站。我的目标是尝试隐藏一些功能,无论用户是否在本地网络上

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

上述问题是因为每个用户都有ip:'::ffff:172.17.0.1'。所有用户都显示为本地网络上的用户,而不是本地网络上的用户

我已经将它放在
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容器