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

标签 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,则反向工作正常。
对我可以从哪里开始的任何提示?
非常感谢。

最佳答案

您需要configure IIS让这个工作。或者,您可以使用 Dns.GetHostEntry如果您只需要在一处进行反向查找。

对每个请求进行反向查找会对性能产生严重影响,这就是默认情况下不启用它的原因。我推荐 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; }
}

关于ASP.NET Request.UserHostName 不包含主机名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12585717/

相关文章:

c# - 如何测试 SSL/TLS 底层是否正常工作

c# - 如何显示带有内容的星号矩形?

c#-4.0 - 取消选择文本框中的文本

asp.net - 如何以编程方式将位置元素添加到 Web 配置?

asp.net - 为 xxxxx 生成设计器文件失败 : Error HRESULT E_FAIL has been returned from a call to a COM component

c# - 解压缩受密码保护的文件

javascript - 如何使用数组提供的值设置在列表框中选择的项目?

c# - Sql-server 2005 中的内部连接问题

c# - FormsIdentity.Ticket.UserData 和 authentication ticket.UserData 保持同步

c# - 如何告诉正则表达式检查整个子字符串?