.NET Core 6.0 Web Api中如何获取客户端IPv4地址呢?
.NET Core 6.0 Web Api中如何获取客户端IPv4地址呢?关于这个问题,我在百度上搜了好多,实际测试没有一个能正常获取,结果全是:::1 这样的结果。
哪位大神能给指点一下呢?非常感谢! request.Headers["X-Forwarded-For"].FirstOrDefault() ?? request.HttpContext.Connection.RemoteIpAddress.ToString() :::1 是本机IP6的环回地址,你本机访问就会以这个出来,访问你业务时,用你电脑的IP,不要用localhost或127.0.0.1 如果你是本地调试 那么就是这个地址,要测试有没有问题 最好 发布或者把你本地端口映射到公网去,然后再访问。 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}");
}
}
} 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)}");
} cxx313120919 发表于 2024-6-22 09:18
如果你是本地调试 那么就是这个地址,要测试有没有问题 最好 发布或者把你本地端口映射到公网去,然后再访 ...
谢谢,确实如此,亦如楼上所说,确实本机调试的话就是:::1是正常的。 bigcan 发表于 2024-6-22 08:22
:::1 是本机IP6的环回地址,你本机访问就会以这个出来,访问你业务时,用你电脑的IP,不要用localhost或127 ...
谢谢,确实如此,亦如楼下所说,确实本机调试的话就是:::1是正常的。
页:
[1]