C# 确定客户';计算机名

C# 确定客户';计算机名,c#,asp.net-mvc,C#,Asp.net Mvc,我正在建立一个内部网站,根据计算机名称显示不同的列表,因为不同的计算机位于不同的区域,是否有方法(在控制器或模型中)确定客户的计算机名称 我尝试过system.environment.machinename,但它只返回服务器的名称,还有其他想法吗?我知道检查客户机的唯一方法是通过请求对象上的ServerVariables集合(应可用于MVC代码) 有关更多信息,请参阅。远程主机和远程地址看起来像候选对象。我认为最好使用以下方法之一将用户绑定到某个位置: 用户自行选择位置后设置的cookie 让

我正在建立一个内部网站,根据计算机名称显示不同的列表,因为不同的计算机位于不同的区域,是否有方法(在控制器或模型中)确定客户的计算机名称


我尝试过system.environment.machinename,但它只返回服务器的名称,还有其他想法吗?

我知道检查客户机的唯一方法是通过请求对象上的ServerVariables集合(应可用于MVC代码)


有关更多信息,请参阅。远程主机和远程地址看起来像候选对象。

我认为最好使用以下方法之一将用户绑定到某个位置:

  • 用户自行选择位置后设置的cookie
  • 让用户登录到站点,以便您可以通过这种方式唯一地跟踪他们
  • 按IP地址记忆用户

无法确保远程主机名是唯一的。由于代理、动态IP等原因,IP也会出现同样的问题,但我认为它会更可靠一些。此外,您还可以通过IP地址进行地理定位。

否。客户端的计算机名在服务器上以任何方式都不可用。这就是http请求-响应的性质。你只能有它的IP地址

一种解决方法是从Flash/Silverlight(我怀疑JavaScript)检索客户端上的机器,并将其放入cookie中,每个请求都可以在服务器上使用cookie。但是这种方法有一大堆问题。

试试这个:

string name = Request.UserHostName;

这里有一个IE唯一的解决方案。它在IE8中工作,具有多个安全警告

<script type="text/javascript" language="javascript">
   var ax = new ActiveXObject("WScript.Network");
   document.write(ax.UserName + '<br />'); //logged in account name
   document.write(ax.ComputerName + '<br />'); //Windows PC name
</script>

var ax=新的ActiveXObject(“WScript.Network”);
document.write(ax.UserName+“
”)//登录帐户名 document.write(ax.ComputerName+“
”)//Windows PC名称
我使用以下方法使其工作:

string IP = Request.UserHostName;
string compName = CompNameHelper.DetermineCompName(IP);
来自compnamehelper的代码:

public static string DetermineCompName(string IP)
{
    IPAddress myIP = IPAddress.Parse(IP);
    IPHostEntry GetIPHost = Dns.GetHostEntry(myIP);
    List<string> compName = GetIPHost.HostName.ToString().Split('.').ToList();
    return compName.First();
}
公共静态字符串DetermineCompName(字符串IP)
{
IPAddress myIP=IPAddress.Parse(IP);
IPHostEntry GetIPHost=Dns.GetHostEntry(myIP);
List compName=GetIPHost.HostName.ToString().Split('.').ToList();
返回compName.First();
}
VB中的代码:

Dim myIP As IPAddress = IPAddress.Parse(Request.UserHostName)
    Dim GetIPHost As IPHostEntry = Dns.GetHostEntry(myIP)
    Dim compName As List(Of String) = GetIPHost.HostName.ToString.Split("").ToList

    return(compName.First)

有没有一种方法可以使用ip查找计算机名?您可以通过调用DNS服务器从其ip获取计算机名注意,如果客户端在NAT后面,这不会给您带来预期的结果,但很有可能这不是问题,因为您在“intranet”上。它工作起来很有魅力。但是为了获得IP,我不得不做一些小的改变。字符串ip=HttpContext.Request.UserHostName.ToString();其余的工作都很出色+1好的,它可能只在局域网上工作,但在internet上不工作。我只是在Dns上得到这个错误“没有这样的主机是已知的”。GetHostEntry(myIP),有什么解决方案吗?不工作,返回了web服务器的名称。System.Net也是如此。我同样需要知道用户是否在“特定”PC上……我相信cookie可能是最好的选择。