我正在构建一个内部网站点,它将根据计算机名称显示不同的列表,因为不同的计算机位于不同的区域,是否有办法(在控制器或模型中)确定客户端的计算机名称?
我尝试过system.environment.machinename,但只返回服务器的名称,还有其他想法吗?
答案 0 :(得分:48)
我使用以下方法开始工作:
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();
}
答案 1 :(得分:4)
代码:
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)
答案 2 :(得分:3)
没有。客户端的计算机名称在服务器上无法以任何方式提供。这是http请求 - 响应的本质。您只能拥有其IP地址。
解决方法可能是从Flash / Silverlight(我怀疑JavaScript)检索客户端上的计算机并将其放入服务器上随每个请求提供的cookie中。但是这种方法存在一大堆问题。
答案 3 :(得分:1)
我认为您最好使用其中一种方法将用户绑定到某个位置:
无法确保远程主机名是唯一的。由于代理,动态IP等原因,IP也会出现同样的问题,但我认为它会更可靠一些。此外,您可以通过IP地址进行地理定位。
答案 4 :(得分:1)
试试这个:
string name = Request.UserHostName;
答案 5 :(得分:0)
我知道检查客户端的唯一方法是通过Request对象上的ServerVariables集合(应该可用于MVC代码)。
有关详细信息,请参阅http://www.4guysfromrolla.com/webtech/092298-3.shtml。 REMOTE_HOST和REMOTE_ADDR看起来像候选人。
答案 6 :(得分:-2)
这是一个仅限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>