第一步:在控制器中定义变量
private IHttpContextAccessor _accessor;
第二步: 控制器的构造函数进行注入
public ValuesController(IHttpContextAccessor accessor)
{
    _accessor = accessor;
}
第三步:在action中 调用
_accessor.HttpContext.Connection.RemoteIpAddress.ToString()
第四步:我们应该要在startup.cs中配置IHttpContextAccessor
public void ConfigureServices(IServiceCollection services)
{
     services.AddMvc();
     services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
}
第五步:可以运行测试一下:

发现已经获取到IP地址啦。
注:在ASP.NET 2.1中,在startup.cs需要修改成以下的内容:
services.AddHttpContextAccessor(); services.TryAddSingleton<IActionContextAccessor, ActionContextAccessor>();
该RemoteIpAddress是类型的IPAddress,不是string。它包含IPv4,IPv6和其他信息,它不像经典的ASP.NET,它对我们更有用。 
原文:https://www.cnblogs.com/qingfenglin/p/11347299.html