Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.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
Asp.net core Asp.net核心远程IP地址获取本地IP(192.168.1.1)_Asp.net Core_Iis_Clientip - Fatal编程技术网

Asp.net core Asp.net核心远程IP地址获取本地IP(192.168.1.1)

Asp.net core Asp.net核心远程IP地址获取本地IP(192.168.1.1),asp.net-core,iis,clientip,Asp.net Core,Iis,Clientip,我通过以下代码获取IP地址: var remoteIpAddress = HttpContext?.Connection?.RemoteIpAddress?.ToString (); 当我在IIS上运行时,通过IP地址(我ISP网络的公共IP地址)进行访问,这一切正常 我在另一台服务器上托管,但映射到域名(由于IIS上有多个网站托管,IP无法访问) 只是没有获取客户端访问的远程IP地址就可以了 此外,我尝试了Microsoft推荐的以下代码,但它不起作用 services.Configur

我通过以下代码获取IP地址:

var remoteIpAddress = HttpContext?.Connection?.RemoteIpAddress?.ToString ();
当我在IIS上运行时,通过IP地址(我ISP网络的公共IP地址)进行访问,这一切正常

我在另一台服务器上托管,但映射到域名(由于IIS上有多个网站托管,IP无法访问)

只是没有获取客户端访问的远程IP地址就可以了

此外,我尝试了Microsoft推荐的以下代码,但它不起作用

  services.Configure<ForwardedHeadersOptions>(options =>
            {
                options.ForwardedHeaders = 
                    ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
            });
services.Configure(选项=>
{
options.ForwardedHeaders=
ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
});

下面是一个在ASP.NET核心中获取客户端IP地址的解决方案

在Startup.cs类的ConfigureServices方法中注入HttpContextAccessor实例。现在使用Microsoft.AspNetCore.Http添加此引用

public void ConfigureServices(IServiceCollection services)
    {
         services.AddControllersWithViews();
         services.AddSingleton<IActionContextAccessor, ActionContextAccessor>();
    }
更新HomeController以在构造函数中插入IActionContextAccessor。尝试使用DI将IActionContextAccessor注入控制器的构造函数

public HomeController(ILogger logger, IActionContextAccessor accessor)
{
    _logger = logger;
    _accessor = accessor;
}
现在,在最后一步中,尝试从访问器变量中检索IP地址

private readonly IActionContextAccessor _accessor;
public IActionResult Index()
{
  var ip = _accessor.ActionContext.HttpContext.Connection.RemoteIpAddress.ToString();
  return View();
}
如果您不想使用DI,则始终可以直接在控制器中访问IP信息,如下所示

var ip = HttpContext.Connection.RemoteIpAddress.ToString();

下面是一个在ASP.NET内核中获取客户端IP地址的解决方案

在Startup.cs类的ConfigureServices方法中注入HttpContextAccessor实例。现在使用Microsoft.AspNetCore.Http添加此引用

public void ConfigureServices(IServiceCollection services)
    {
         services.AddControllersWithViews();
         services.AddSingleton<IActionContextAccessor, ActionContextAccessor>();
    }
更新HomeController以在构造函数中插入IActionContextAccessor。尝试使用DI将IActionContextAccessor注入控制器的构造函数

public HomeController(ILogger logger, IActionContextAccessor accessor)
{
    _logger = logger;
    _accessor = accessor;
}
现在,在最后一步中,尝试从访问器变量中检索IP地址

private readonly IActionContextAccessor _accessor;
public IActionResult Index()
{
  var ip = _accessor.ActionContext.HttpContext.Connection.RemoteIpAddress.ToString();
  return View();
}
如果您不想使用DI,则始终可以直接在控制器中访问IP信息,如下所示

var ip = HttpContext.Connection.RemoteIpAddress.ToString();

是的,这就是我正在做的,但它没有获得远程ip,而是路由器mikrotik ip,而不是使用以下链接中的发卡。你的意思是mikrotik正在阻止/更改远程ip地址吗?是的,检查我上一条评论中添加的链接。仔细阅读,希望它能解决你的问题。您是否有任何视频显示如何正确执行此操作是的,这是我正在做的,但它不是获取远程ip,而是路由器mikrotik ip,而不是使用以下链接中的发夹您的意思是mikrotik正在阻止/更改远程ip地址是的,检查我上一条评论中添加的链接。仔细阅读,希望它能解决你的问题。你有没有视频显示如何做到这一点