吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 788|回复: 7
收起左侧

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

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

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
为之奈何? + 1 + 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)[0]);
            }
            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;

感谢!代码很详细,直接帮助解决了问题。
我最后的代码如下:
[C#] 纯文本查看 复制代码
[HttpPost("/RoadList/Query")]
public async Task<ResultData> Post([FromQuery] 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)[0]).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是正常的。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-15 11:33

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表