asp.net-mvc - 在用于 WebAPI 和 WebApplication 的通用 c# 类库中获取客户端的 IP 地址
问题描述
我的业务层对于 WebApi 和 WebApplication 是通用的。需要跟踪每个操作的客户端 IP 地址。在网上搜索并尝试过,但在开发中,但我认为这是针对 Server 的。我正在获取服务器的 IP 地址:
var host = System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName());
string ipAddress = host.AddressList[1].ToString();
解决方案
你可以试试这个扩展方法:
public static class HttpContextExtensions
{
public static string GetIpAddress(this HttpContext httpContext)
{
try
{
return httpContext.Connection.RemoteIpAddress.ToString();
}
catch
{
return string.Empty;
}
}
}
较旧的 .Net 版本示例:
/// <summary>
/// Gets the IP address for the current request, returns 0.0.0.0 if HttpsContext does not exist.
/// </summary>
/// <returns></returns>
public static string GetIpAddress()
{
var context = HttpContext.Current;
var ipAddress = String.Empty;
if (context != null)
{
ipAddress = context.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
if (String.IsNullOrWhiteSpace(ipAddress))
{
ipAddress = context.Request.ServerVariables["REMOTE_ADDR"];
}
else
{
var ipAddresses = ipAddress.Split(new [] {','}, StringSplitOptions.RemoveEmptyEntries);
if (ipAddresses.Length > 0)
{
ipAddress = ipAddresses[0];
}
}
ipAddress = String.IsNullOrWhiteSpace(ipAddress) ? context.Request.UserHostName : ipAddress;
}
return String.IsNullOrWhiteSpace(ipAddress) ? "0.0.0.0" : ipAddress;
}
推荐阅读
- vba - 在 PowerPoint 中将节点捕捉到网格
- node.js - Dialogflow 通过 NodeJS 传递参数
- java - 使用 JAVA 连接来自 .xml 文件的多个标签
- javascript - 如何提高 Chess.js 的 Minimax 的性能?
- flowtype - Flowtype:所有字段为Maybes的类型的简写
- c++ - 通过c ++中的字符串指针复制字符串变量中的字符串
- postgresql - 在 JSONB 日期字段上过滤 LoopBack API
- wordpress - 如何在 wp_head 中将备用、图标和清单链接排入队列?
- elasticsearch - 弹性搜索上的聚合太慢
- php - 如何同时显示数组键和值?