【问题标题】:Asp.net Core Remote IP Address get local ip (192.168.1.1)Asp.net Core远程IP地址获取本地ip(192.168.1.1)
【发布时间】:2020-11-29 16:33:44
【问题描述】:

我通过以下代码获取 IP 地址:

var remoteIpAddress = HttpContext?.Connection?.RemoteIpAddress?.ToString ();

当我在 IIS 上运行并通过 IP 地址(我的 ISP 网络的公共 IP 地址)访问时,这可以正常工作。

我在另一台服务器上托管,但映射到域名(由于 IIS 上托管多个网站,无法通过 IP 访问)。

只是没有获取客户端访问的远程IP地址,它工作正常。

另外,我尝试了微软推荐的以下代码,但它不起作用。

  services.Configure<ForwardedHeadersOptions>(options =>
            {
                options.ForwardedHeaders = 
                    ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
            });

【问题讨论】:

    标签: asp.net-core iis clientip


    【解决方案1】:

    这是在 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();
    

    【讨论】:

    • 是的,这就是我正在做的,但它没有获得远程 IP,而是路由器 mikrotik ip
    • 使用来自以下链接的发夹link
    • 你的意思是 Mikrotik 正在阻止/更改远程 IP 地址
    • 是的,请查看我上一条评论中添加的链接。仔细阅读,希望它能解决您的问题。
    • 我不擅长 Mikrotic。你有任何视频显示如何做到这一点
    猜你喜欢
    • 1970-01-01
    • 2022-01-22
    • 2019-10-12
    • 1970-01-01
    • 1970-01-01
    • 2011-11-12
    • 2011-10-11
    • 1970-01-01
    • 2012-03-01
    相关资源
    最近更新 更多