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

时间:2020-08-10 03:59:10

标签: asp.net-core iis clientip

我通过以下代码获取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;
            });

1 个答案:

答案 0 :(得分:0)

这是在ASP.NET Core中获取客户端IP地址的解决方案。

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

public void ConfigureServices(IServiceCollection services)
    {
         services.AddControllersWithViews();
         services.AddSingleton<IActionContextAccessor, ActionContextAccessor>();
    }

声明一个变量。

private readonly IActionContextAccessor _accessor;

更新HomeController,以将IActionContextAccessor注入构造函数中。尝试使用DI将IActionContextAccessor注入到控制器的构造函数中。

public HomeController(ILogger logger, IActionContextAccessor accessor)
{
    _logger = logger;
    _accessor = accessor;
}

现在,在最后一步,尝试从访问变量中检索IP地址。

public IActionResult Index()
{
  var ip = _accessor.ActionContext.HttpContext.Connection.RemoteIpAddress.ToString();
  return View();
}

如果不想使用DI,则始终可以按照以下步骤直接在控制器中访问IP信息。

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