# 说明

服务器环境:

  • Asp.net 5
  • IIS 7.4
  • 非本地

在百度找来的方法比如说

1
2
3
_accessor.HttpContext.Connection.RemoteIpAddress.ToString()
HttpContext.Request.Headers["X-Forwarded-For"].FirstOrDefault();
HttpContext.Connection.RemoteIpAddress.ToString();

之类的,实际写出来拿到的全部都是 ::1 .
StackOverflow 找了找,发现是 iis 拦截了请求并重发给了服务器,那这样获取到的肯定都是本地 ip. 同时也拿到了下面这个有效的方法
这里是网址 https://stackoverflow.com/a/41335701

# 安装依赖

Nuget 下载 Microsoft.AspNetCore.HttpOverrides

# 使用流程

  1. Startup.csConfigure 函数内添加
1
2
3
4
5
app.UseForwardedHeaders(new ForwardedHeadersOptions
{
ForwardedHeaders = ForwardedHeaders.XForwardedFor |
ForwardedHeaders.XForwardedProto
});

切记,需要在 app.UseAuthorization(); 之前
2. 使用以下代码获取 ip

1
string ip = Request.HttpContext.Connection.RemoteIpAddress?.ToString();