2

我通过以下代码获取 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;
            });
4

1 回答 1

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();
于 2020-08-10T04:36:34.957 回答