datoneids 发表于 2024-6-21 22:23

.NET Core 6.0 Web Api中如何获取客户端IPv4地址呢?

.NET Core 6.0 Web Api中如何获取客户端IPv4地址呢?
关于这个问题,我在百度上搜了好多,实际测试没有一个能正常获取,结果全是:::1 这样的结果。
哪位大神能给指点一下呢?非常感谢!

yunruifuzhu 发表于 2024-6-21 23:28

request.Headers["X-Forwarded-For"].FirstOrDefault() ?? request.HttpContext.Connection.RemoteIpAddress.ToString()

bigcan 发表于 2024-6-22 08:22

:::1 是本机IP6的环回地址,你本机访问就会以这个出来,访问你业务时,用你电脑的IP,不要用localhost或127.0.0.1

cxx313120919 发表于 2024-6-22 09:18

如果你是本地调试 那么就是这个地址,要测试有没有问题 最好 发布或者把你本地端口映射到公网去,然后再访问。

hanfengda 发表于 2024-6-22 16:23

public class RealIpMiddleware
{
    private readonly ILogger<RealIpMiddleware> _logger;
    private readonly RequestDelegate _next;

    public RealIpMiddleware(RequestDelegate next, ILogger<RealIpMiddleware> logger)
    {
      _next = next;
      _logger = logger;
    }

    public async Task Invoke(HttpContext context)
    {
      try
      {
            var headers = context.Request.Headers;
            if (headers.ContainsKey("X-Forwarded-For"))
            {
                context.Connection.RemoteIpAddress = IPAddress.Parse(headers["X-Forwarded-For"].ToString().Split(',', StringSplitOptions.RemoveEmptyEntries));
            }
            await _next(context);
      }
      catch (BadHttpRequestException ex)
      {
            _logger.LogWarning(ex, "BadHttpRequestException");
      }
      catch (Exception ex)
      {
            _logger.LogError($"{ex}");
      }
    }
}

datoneids 发表于 2024-6-22 21:39

hanfengda 发表于 2024-6-22 16:23
public class RealIpMiddleware
{
    private readonly ILogger _logger;


感谢!代码很详细,直接帮助解决了问题。
我最后的代码如下:

public async Task<ResultData> Post( QueryData queryData)
{
    var headers=HttpContext.Request.Headers;
    string ip;
    if (headers.ContainsKey("X-Forwarded-For"))
    {
      ip=System.Net.IPAddress.Parse(headers["X-Forwarded-For"].ToString().Split(',', StringSplitOptions.RemoveEmptyEntries)).ToString();
    }
    else
    {
      ip=headers["X-Forwarded-For"].FirstOrDefault() ?? HttpContext.Connection.RemoteIpAddress!.ToString();
    }
    LogHelper.Info($"{ip}发起查询:{JsonConvert.SerializeObject(queryData)}");
}

datoneids 发表于 2024-6-22 21:40

cxx313120919 发表于 2024-6-22 09:18
如果你是本地调试 那么就是这个地址,要测试有没有问题 最好 发布或者把你本地端口映射到公网去,然后再访 ...

谢谢,确实如此,亦如楼上所说,确实本机调试的话就是:::1是正常的。

datoneids 发表于 2024-6-22 21:42

bigcan 发表于 2024-6-22 08:22
:::1 是本机IP6的环回地址,你本机访问就会以这个出来,访问你业务时,用你电脑的IP,不要用localhost或127 ...

谢谢,确实如此,亦如楼下所说,确实本机调试的话就是:::1是正常的。
页: [1]
查看完整版本: .NET Core 6.0 Web Api中如何获取客户端IPv4地址呢?