【发布时间】:2010-11-29 11:57:07
【问题描述】:
我正在构建一个 Intranet 站点,该站点将根据计算机名称显示不同的列表,因为不同的计算机位于不同的区域,有没有办法(在控制器或模型中)确定客户端的计算机名称?
我试过 system.environment.machinename 但只返回服务器的名称,还有其他想法吗?
【问题讨论】:
标签: c# asp.net-mvc
我正在构建一个 Intranet 站点,该站点将根据计算机名称显示不同的列表,因为不同的计算机位于不同的区域,有没有办法(在控制器或模型中)确定客户端的计算机名称?
我试过 system.environment.machinename 但只返回服务器的名称,还有其他想法吗?
【问题讨论】:
标签: c# asp.net-mvc
我使用以下方法让它工作:
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 中。但是这种方法存在一大堆问题。
【讨论】:
我认为您最好使用以下方法之一将用户与某个位置联系起来:
没有办法确保远程主机名是唯一的。由于代理、动态 IP 等,IP 也会出现同样的问题,但我认为它会更可靠一些。此外,您可以通过 IP 地址进行地理定位。
【讨论】:
试试这个:
string name = Request.UserHostName;
【讨论】:
我知道检查客户端的唯一方法是通过 Request 对象上的 ServerVariables 集合(应该可用于 MVC 代码)。
请参阅http://www.4guysfromrolla.com/webtech/092298-3.shtml 了解更多信息。 REMOTE_HOST 和 REMOTE_ADDR 看起来像候选项。
【讨论】:
这是一个仅限 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>
【讨论】: