我支持一个需要获取客户端计算机名称的系统,我尝试了不同的代码,但它们都只是获取主机服务器的计算机名称,而不是客户端的计算机名称。这是片段:
public void CreateEvents(string className, string eventName, string eventData, string userId)
{
string hostName = Dns.GetHostName(); // Retrive the Name of HOST
string compname= HttpContext.Current.Request.UserHostAddress;
var browser = HttpContext.Current.Request.Browser.Browser + " " + HttpContext.Current.Request.Browser.Version;
if (string.IsNullOrEmpty(userId))
{
userId = compname;
}
var entity = new EventLog
{
ClassName = className,
EventName = eventName,
EventData = eventData,
IpAddress = ipAddress,
Browser = browser,
UserId = userId,
CreatedDate = DateTime.Now
};
_db.EventLogs.Add(entity);
_db.SaveChanges();
}
public string GetIpAddress()
{
HttpContext context = System.Web.HttpContext.Current;
string compname= context.Request.UserHostAddress; //System.Net.Dns.GetHostName();
return compname;
}
不,你不能,除非客户端在发出 HTTP 请求时发送此类信息。我所说的“客户端”指的是任何 - 某些应用程序、浏览器等。
您可以使用标准浏览器开发工具检查您自己的浏览器请求流,并准确地查看您的浏览器发送的信息。它不会有您的机器名称(除非您的机器中有某些东西,这可能会成为问题)。
也就是说,HTTP 标头数据是除了标准的网络信息(例如 IP 地址)(也不能保证是客户端的 IP 地址 - 它可能是客户端的网络地址)之外的数据。您可以找到的最接近的是
hostname
(如果存在),即使如此,就像 IP 地址一样,也不能保证是机器名称。
内部网络 (LAN) 可能是例外。
你可以使用
HttpContext.Request.UserHostAddress
为了获取IP地址,也
Request
有UserHostName
,但我不确定这个属性
您可以通过以下方式获取计算机名称:
Environment.MachineName.ToString()
您可以通过以下方式获取托管服务器名称:
Server.MachineName.ToString()