获取客户端的IP地址

时间:2015-12-18 15:38:57

标签: asp.net-core ip-address

以前在其他版本的asp.net中,我使用了HttpRequest的这些属性:

Request.ServerVariables["REMOTE_ADDR"]
Request.UserHostAddress

如何在ASP.NET Core中实现相同的目标?

5 个答案:

答案 0 :(得分:9)

您可以使用IHttpContextAccessor

private IHttpContextAccessor _accessor;
public Foo(IHttpContextAccessor accessor)
{
    _accessor = accessor;
}

现在你以这种方式获得IP地址"

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

答案 1 :(得分:8)

HttpContext.Connection.RemoteIpAddress是您要寻找的财产

答案 2 :(得分:0)

您可以使用请求

var GetIp = Request.HttpContext.Connection.RemoteIpAddress.ToString();

答案 3 :(得分:0)

效果很好。

var ip = request.HttpContext.Connection.RemoteIpAddress;

答案 4 :(得分:0)

在经典的ASP.NET中,我们曾经通过Request.UserHostAddress获取客户端IP地址。但这不适用于ASP.NET Core 2.0。我们需要一种不同的方法来检索HTTP请求信息。

在MVC控制器中定义变量

private IHttpContextAccessor _accessor;

将DI插入控制器的构造函数中

public SomeController(IHttpContextAccessor accessor)
{
    _accessor = accessor;
}

获取IP地址

_accessor.HttpContext.Connection.RemoteIpAddress.ToString()

如果使用默认的MVC模板创建ASP.NET Core项目,则Startup.cs中应具有HttpContextAcccessor的DI

public void ConfigureServices(IServiceCollection services)
{    
    services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
}

services.AddHttpContextAccessor();
services.TryAddSingleton<IActionContextAccessor, ActionContextAccessor>();
  

RemoteIpAddress的类型为IPAddress,而不是字符串。它包含了   IPv4,IPv6和其他信息。