正常情况下:
1、startup.cs文件中的ConfigureServices 添加依赖注入
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
services.AddControllersWithViews();
services.AddMvcCore().AddMvcOptions(options =>
{
options.ModelBinderProviders.Insert(0, new ModelBinderProvider());
});
//添加依赖注入
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
}
2、在 Controller 文件注入 IHttpContextAccessor,例:
private readonly IHttpContextAccessor _httpContextAccessor;
public IndexController(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
}
3、获取客户端 ip
string ip = _httpContextAccessor.HttpContext.Connection.RemoteIpAddress.ToString();
非正常情况,采用了 Nginx 之类的反向代理服务,采用以上方法无法正确的获取到客户端 ip 地址(获取到的是 127.0.0.1);
需要采用如下方法获取客户端 ip 地址:
private string GetClientIP()
{
string ip = "127.0.0.1";
if (Request.Headers.ContainsKey("X-Real-IP"))
{
ip = Request.Headers["X-Real-IP"].ToString();
}
if (Request.Headers.ContainsKey("X-Forwarded-For"))
{
ip = Request.Headers["X-Forwarded-For"].ToString();
}
return ip;
}