以前在其他版本的asp.net中,我使用了HttpRequest
的这些属性:
Request.ServerVariables["REMOTE_ADDR"]
Request.UserHostAddress
如何在ASP.NET Core中实现相同的目标?
答案 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和其他信息。