ASP.NET Request.UserHostName不包含主机名

时间:2012-09-25 14:59:33

标签: asp.net c#-4.0

如果创建了新数据集,我需要将请求计算机的主机名存储在数据库中。为了向用户清楚地指出这一点(它是所有公司内部的),我们将其显示为用户填写的表格中的三个文本框。 这三个文本框就像这样填充:

protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            txtHostname.Text = Request.UserHostName.ToString();
            txtIPAdress.Text = Request.UserHostAddress.ToString();
            txtWindowsLogin.Text = Request.LogonUserIdentity.Name.ToString();
        }
    }

然而,无论我测试的是哪个客户端,反向查找应该在Request.UserHostname中提供主机名的IP都不起作用,因此该字段填充了IP地址。如果我在服务器上使用nslookup,则反转工作正常。 我可以从哪里得到任何提示? 非常感谢。

2 个答案:

答案 0 :(得分:4)

您需要configure IIS才能使其正常运行。或者,如果您只需要在一个位置使用Dns.GetHostEntry,则可以使用{{3}}进行反向查找。

对每个请求进行反向查找会对性能产生严重影响,这就是默认情况下未启用的原因。如果可以,我建议使用Dns.GetHostEntry路线。

这是我们使用的有用的反向查找方法:

public static string ReverseLookup(string ip)
{
    if (string.IsNullOrEmpty(ip)) return ip;

     try 
     {
       return Dns.GetHostEntry(ip).Select(entry => entry.HostName).FirstOrDefault() ?? ip;
     } 
     catch(SocketException) { return ip; }
}

答案 1 :(得分:0)

Page.Request.ServerVariables [ “HTTP_HOST”] ToUpper的();

您可以使用它来获取负载平衡应用程序上的主机名。