我正在构建一个内部网站,它将根据计算机名称显示不同的列表,因为不同的计算机位于不同的区域,是否有一种方法(在控制器或模型中)确定客户端的计算机名称?
我尝试了system.environment.machinename,但那只返回服务器的名称,还有其他的想法吗?
我正在构建一个内部网站,它将根据计算机名称显示不同的列表,因为不同的计算机位于不同的区域,是否有一种方法(在控制器或模型中)确定客户端的计算机名称?
我尝试了system.environment.machinename,但那只返回服务器的名称,还有其他的想法吗?
我使用以下方式使其正常工作:
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();
}
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)
不行。客户端计算机名称在服务器上无法以任何方式获取。这是http请求响应的本质。你只能获得它的IP地址。
一种解决方法可能是从Flash/Silverlight(我怀疑JavaScript)中检索客户端上的机器,并将其放入cookie中,该cookie可在每个请求中与服务器一起使用。但是,这种方法存在一整套问题。
试试这个:
string name = Request.UserHostName;
我认为你最好使用以下方法之一将用户与位置绑定:
无法确保远程主机名是唯一的。由于代理、动态IP等问题,IP也存在相同的问题,但我认为这种方式会更可靠一些。另外,您可以使用IP地址进行地理定位。
这里有一个仅适用于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>