c# - 为什么 Request ["host"] == "dev.testhost.com:1234"而 Request.Url.Host == "localhost"

标签 c# asp.net visual-studio debugging cassini

大家好,在使用 Visual Studio 2008 (Cassini) 在内置 Web 服务器上本地测试 ASP.NET 应用程序时,我似乎发现了一个差异。

我在本地机器上设置了一个主机,将 dev.testhost.com127.0.0.1 相关联,因为我有一个应用程序需要更改其外观取决于用于调用它的主机 header 。

但是,当我使用 http://dev.testhost.com:1234/index.aspx 请求我的测试应用程序时,Request.Url.Host 的值总是 "localhost"。而 Request.Headers["host"] 的值是 "dev.testhost.com:1234"(正如我所期望的那样两者成为)。

我不担心第二个值包含端口号,但我很困惑为什么HOST NAMES 完全不同!有谁知道这是已知问题还是设计使然?还是我是个白痴?!

我宁愿使用 Request.Url.Host,因为这样可以避免在测试时去掉端口号...... - 由于可能造成困惑! - 山姆

最佳答案

Request.Headers["host"] 是从连接到服务器的应用程序收到的值,而另一个值是服务器在尝试获取域名时得到的值。

浏览器在请求中使用输入的域名,因为它用于虚拟域。服务器报告在服务器首选项中设置的那个,或者它找到的第一个。

编辑:查看 Cassini 的代码以查看它是否使用了某些特定设置,我注意到以下代码:

public string RootUrl {
  get {
    if (_port != 80) {
      return "http://localhost:" + _port + _virtualPath;
    }
    else {
      return "http://localhost" + _virtualPath;
    }
  }
}

//
// Socket listening
//

public void Start() {
  try {
    _socket = CreateSocketBindAndListen(AddressFamily.InterNetwork, IPAddress.Loopback, _port);
  }
  catch {
    _socket = CreateSocketBindAndListen(AddressFamily.InterNetworkV6, IPAddress.IPv6Loopback, _port);
  }
  // …
}

解释似乎是 Cassini 明确引用了本地主机,并且没有尝试进行反向 DNS 查找。不同的是,它不会使用 return "http://localhost"+ _virtualPath;

关于c# - 为什么 Request ["host"] == "dev.testhost.com:1234"而 Request.Url.Host == "localhost",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1941522/

相关文章:

c++ - 使用 CMake 安装的 PDB 文件

c# - 是否有使用 Microsoft 生成密码哈希的标准方法?

c# - 在另一个窗体 View 中单击按钮时窗体 View 数据源丢失

c# - 获取 List<class> 形式的子集合

c# - 在 Chrome 中更新谷歌翻译 cookie 时出现问题

javascript - GridView WebForm 每行有多个复选框,但每行只允许检查 1 个

visual-studio - 在 Office 2013 和 2010 (Visual Studio 2013) 之间选择加载项调试环境

visual-studio - 在 Visual Studio 中显示构建时间

c# - 如何使用 Roslyn CTP 将行尾添加到 AttribueList

c# - 我怎么能在第一个位置有一个空项目的十进制组合框?