【问题标题】:Hosts file hostname not being returned in c# ASP.NET MVC在 c# ASP.NET MVC 中未返回主机文件主机名
【发布时间】:2012-03-29 23:08:39
【问题描述】:

我目前正在测试一个站点,该站点具有多个指向同一个 ASP.NET 应用程序的子域,并且路由处理每个请求的处理方式。

为了测试,我在“主机文件”中添加了几个子域,例如“127.0.0.1 admin.TestDomain.com”,工作正常。

但是,问题是当我在 c# 中调用任何函数来获取主机名/域/url (HttpContext.Current.Request.Url...) 时,主机 url 总是以“localhost”返回,而不是比“TestDomain”。

任何想法为什么以这种方式解析此名称,以及我可以在哪里获得“TestDomain.com”?

【问题讨论】:

  • 您是如何尝试“获取主机名/域/url”的?
  • 尝试了很多方法,但它们都涉及 HttpContext.Current.Request.Url 类,并且在调试中断时检查该类时我无法在任何地方找到“TestDomain”。
  • 您能否说得更具体些;向我们展示一个控制器动作和准确代码,以及准确它输出什么?另外,当你得到你提到的结果时,你在跑什么?什么浏览器?我问是因为我自己没有看到这种行为,所以我想尝试复制它。

标签: asp.net asp.net-mvc dns hosts


【解决方案1】:

我认为,在本地操作系统使用您的“主机”文件将域映射到 IP 地址 (localhost) 后,原始主机会丢失。 您可以尝试 RawUrl 来检索在浏览器中输入的确切 URL:

HttpContext.Current.Request.RawUrl  

您也可以尝试从用户Host:请求头中获取HTTP_HOST变量,它应该包含浏览器尝试请求的原始主机(不是服务器的地址或默认主机):

string requestedDomain = HttpContext.Current.Request.ServerVariables["HTTP_HOST"];

也许Getting parameters from RawUrl 的文章会有所帮助。

【讨论】:

  • 我自己也考虑过这个问题,但从问题来看,我认为他使用的是 ASP.NET MVC 中默认使用的 URL 路由。路由实际上不进行重写(默认情况下使用),而且我认为我自己没有看到类似的行为;我总是能准确地看到地址栏中的内容为Host。我认为!但这绝对是需要更仔细研究的事情......
  • 路由和重写的区别示例:使用重写时,IIS 日志实际上显示了 rewritten URL,这就解释了为什么这个答案中的信息关于重写是正确的.但是,路由会导致 IIS 日志中显示的 URL 与请求的 URL 相同。
  • 我确定问题出现在 MVC 路由之前。是的,你是对的,关于重写 - 实际上有 mapping 域到 IP=localhost 由本地操作系统执行(已更正,感谢您的注释)。浏览器请求主机 TestDomain.com 访问了 127.0.0.1,然后服务器以某种方式认为它是 localhost。无论如何Host: HTTP 请求的标头应该是原始的 TestDomain.com
  • 完美。原始 URL 只给了我词干(例如“/home”),但 ServerVariables["HTTP_HOST"] 为我排序。非常感谢!我不会对此进行深入研究,但如果有兴趣,我很乐意提供信息/进行进一步的测试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-07
  • 2013-12-31
  • 1970-01-01
  • 2013-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多