gpt4 book ai didi

c# - 在 ASP.NET CORE Web API 中获取客户端 IP 地址有问题吗?

转载 作者:行者123 更新时间:2023-12-04 15:44:19 26 4
gpt4 key购买 nike

我在 ASP.NET CORE Web API 中使用以下方法获取服务器 IP 地址而不是客户端 IP。请告诉我哪里出错了。我之前在 asp mvc 中使用过 ServerVariables["HTTP_X_FORWARDED_FOR"] 并且工作正常。

private string DetectIPAddress(HttpRequest request)
{
var _IP = "RemoteIp:" + request.HttpContext.Connection.RemoteIpAddress.ToString() + " - LocalIpAddress:" +
request.HttpContext.Connection.LocalIpAddress;
try
{
_IP += " IP.AddressFamily:" + Dns.GetHostEntry(Dns.GetHostName()).AddressList[1].ToString();

_IP += " HostName:" + Dns.GetHostEntry(Dns.GetHostName()).HostName;

}
catch (Exception e)
{

}

return _IP;
}

最佳答案

获取客户端 IP 听起来很容易,但实际上我已经尝试获取客户端 IP 很多个小时,直到找到 this gist extension method。在@Voodoo 的评论中帮助了我。我想让它更加突出,因此创建一个单独的答案。它适用于 AWS fargate 上的 .NET 5,可能具有某种负载均衡器直通,其中 RemoteIpAddress 单独不起作用。

public static class HttpContextExtensions
{
//https://gist.github.com/jjxtra/3b240b31a1ed3ad783a7dcdb6df12c36

public static IPAddress GetRemoteIPAddress(this HttpContext context, bool allowForwarded = true)
{
if (allowForwarded)
{
string header = (context.Request.Headers["CF-Connecting-IP"].FirstOrDefault() ?? context.Request.Headers["X-Forwarded-For"].FirstOrDefault());
if (IPAddress.TryParse(header, out IPAddress ip))
{
return ip;
}
}
return context.Connection.RemoteIpAddress;
}
}

像这样使用它:

var ip = HttpContext.GetRemoteIPAddress().ToString();

关于c# - 在 ASP.NET CORE Web API 中获取客户端 IP 地址有问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56525043/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com