c# - 检查网站用户是否在本地网络上。ASP.NET 核心 MVC
问题描述
我在 .net core 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);
}
任何人都知道我在检查用户是否在本地网络上做错了什么?谢谢 :)
解决方案
推荐阅读
- python - 需要一些帮助来使用 instaloader 编写代码
- r - rbind several columns of one data frame below each other
- delphi-xe7 - 使用 Quickreports 5.06 Pro 和 Delphi-XE7 打印水印
- scala - 如何在 ScalaCheck 中表达“暗示”,例如“如果整数 n * n = 0 则 n = 0”?
- c++ - 在 Qt 中设计应用程序架构的首选方法
- elasticsearch - 未能刷新缓冲区
- spring-boot - 如何在 Postman 中使用请求参数发出获取请求
- speech-recognition - 对话中特定个人的语音到文本
- amazon-sqs - 消费者有没有办法确保没有其他消费者在 SQS 中处理重复的消息?
- c# - 使用 ToolStripMenuItem Owner Item 时如何实现空异常