问题描述
我在 .net 核心 MVC 中创建了一个网站。我的目标是尝试将一些功能隐藏在用户是否在本地网络上之后。
我在 docker for windows 上托管的 linux 容器中运行我的网站。目前,到达该站点的每个用户都有 ip '::ffff:172.17.0.1'。这最初使网站抛出错误。我现在已经进行了一些错误处理,所以这不会抛出。
上面的问题是每个用户都有ip:'::ffff:172.17.0.1'。所有用户都显示为在本地网络上,而实际上并非如此。
我已将其放入我的 startup.cs
文件中的 configure
方法
app.UseForwardedHeaders(new ForwardedHeadersOptions
{
ForwardedHeaders = ForwardedHeaders.XForwardedFor |
ForwardedHeaders.XForwardedProto
});
var remoteIpAddress = context.Connection.RemoteIpAddress;
var networkDetails = new UserNetworkInfomation();
if (remoteIpAddress == null)
return networkDetails;
var isLocalNetwork = remoteIpAddress.AddressFamily == AddressFamily.InterNetworkV6;
try
{
var userIpAddress = isLocalNetwork ? GetHostPublicIP() : $"{remoteIpAddress}";
_logger.Loginformation($"User({remoteIpAddress}) on local network: {isLocalNetwork}");
networkDetails.IpAddress = userIpAddress;
networkDetails.IsLocalNetwork = isLocalNetwork;
}
catch (Exception ex)
{
_logger.LogError(ex,ex.Message);
}
return networkDetails;
传递给上述方法的context
来自HomeController
:
public IActionResult Index()
{
var userNetworkInfomation = _networkChecker.IsLocal(HttpContext);
return View(userNetworkInfomation);
}
有谁知道我在检查用户是否在本地网络上做错了什么?谢谢:)
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)