如何使用asp.net mvc获取客户端计算机名称?

问题描述 投票:0回答:3

我支持一个需要获取客户端计算机名称的系统,我尝试了不同的代码,但它们都只是获取主机服务器的计算机名称,而不是客户端的计算机名称。这是片段:

 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;
    }
c# asp.net-mvc
3个回答
6
投票

不,你不能,除非客户端在发出 HTTP 请求时发送此类信息。我所说的“客户端”指的是任何 - 某些应用程序、浏览器等。

您可以使用标准浏览器开发工具检查您自己的浏览器请求流,并准确地查看您的浏览器发送的信息。它不会有您的机器名称(除非您的机器中有某些东西,这可能会成为问题)。

也就是说,HTTP 标头数据是除了标准的网络信息(例如 IP 地址)(也不能保证是客户端的 IP 地址 - 它可能是客户端的网络地址)之外的数据。您可以找到的最接近的是

hostname
(如果存在),即使如此,就像 IP 地址一样,也不能保证是机器名称。

内部网络 (LAN) 可能是例外。


1
投票

你可以使用

HttpContext.Request.UserHostAddress 

为了获取IP地址,也

Request
UserHostName
,但我不确定这个属性


-2
投票

您可以通过以下方式获取计算机名称:

Environment.MachineName.ToString()

您可以通过以下方式获取托管服务器名称:

Server.MachineName.ToString()
© www.soinside.com 2019 - 2024. All rights reserved.