我通过以下代码获取IP地址:
var remoteIpAddress = HttpContext?.Connection?.RemoteIpAddress?.ToString ();
当我在IIS上运行并通过IP地址(ISP网络的公共IP地址)访问时,此方法正常。
我在另一台服务器上托管,但是映射到域名(由于IIS上有多个网站托管,因此IP无法访问)。
工作正常,只是没有获得客户端访问的远程IP地址。
此外,我尝试了Microsoft推荐的以下代码,但它不起作用。
services.Configure<ForwardedHeadersOptions>(options =>
{
options.ForwardedHeaders =
ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
});
答案 0 :(得分:0)
这是在ASP.NET Core中获取客户端IP地址的解决方案。
从Startup.cs类中的ConfigureServices方法中注入HttpContextAccessor实例。现在,使用Microsoft.AspNetCore.Http添加此引用。
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
services.AddSingleton<IActionContextAccessor, ActionContextAccessor>();
}
声明一个变量。
private readonly IActionContextAccessor _accessor;
更新HomeController,以将IActionContextAccessor注入构造函数中。尝试使用DI将IActionContextAccessor注入到控制器的构造函数中。
public HomeController(ILogger logger, IActionContextAccessor accessor)
{
_logger = logger;
_accessor = accessor;
}
现在,在最后一步,尝试从访问变量中检索IP地址。
public IActionResult Index()
{
var ip = _accessor.ActionContext.HttpContext.Connection.RemoteIpAddress.ToString();
return View();
}
如果不想使用DI,则始终可以按照以下步骤直接在控制器中访问IP信息。
var ip = HttpContext.Connection.RemoteIpAddress.ToString();