Request.Url.ToString()返回嵌套域的机器名

时间:2009-08-26 02:57:01

标签: asp.net deployment

当我在服务器上部署我的应用程序时,我遇到了这个问题:

Request.Url.ToString();返回计算机名称而不是域名。

例如:

而不是返回http://www.domainName.com/default.aspx,而是返回http://appserver-01/default.aspx

注意: 部署前一切正常。

7 个答案:

答案 0 :(得分:5)

听起来它可能是以下一种或多种:

  1. 您的服务器位于防火墙和/或负载均衡器后面,正在从请求中删除Host:标头。

  2. 检查IIS配置 - 绑定列表应包括domainName.comwww.domainName.com,而不是空白(默认站点)。

  3. 您是在公司网络内部还是外部提出请求?网络管理员可能配置内部DNS的方式与外部DNS不同。

  4. 将此代码作为ServerVariables.aspx放在您网站的某个位置(暂时:它会公开服务器配置信息),它会转储请求标头:

    <%@ Page Language="C#" Theme="" %>
    <html>
    <head>
    <title>Server Variables</title>
    <style>
    thead th {border-bottom: 2px solid  #000000; padding: 2px 8px; font-size: 130%; text-align: left;}
    tbody td {border-bottom: 1px dotted #999999; padding: 2px 8px;}
    </style>
    </head>
    <body>
    <table cellpadding="0" cellspacing="0">
     <thead>
      <tr>
       <th>Server Variable</th>
       <th>Value</th>
      </tr>
     </thead>
     <tbody><%
        foreach (string name in Request.ServerVariables)
        {
    %>
      <tr>
       <td><pre><%= name %></pre></td>
       <td><pre><%= Request.ServerVariables[name] %>&nbsp;</pre></td>
      </tr><%
        }
    %>
     </tbody>
    </table>
    </body>
    </html>
    

答案 1 :(得分:1)

好了,使用Reflector,在我看来,Request.Url中包含的Uri对象肯定是根据请求头中的信息构建的。

鉴于此,我怀疑可能出现的请求并非您认为的那样。尝试查看进入服务器的请求中的Raw标头。我会使用数据包嗅探器,我敢打赌它们反映了你所看到的问题。如果是这样,问题不在你的网络服务器上,它就在那之前。

您是否有任何可能导致此问题的转发设置?像某些域控制器完成的http转发?你有没有任何自定义的HttpHandlers在交付请求之前按摩请求?如果你这样做,我会看那里。如果您认为不这样做,请向您的网络管理员(如果有的话)确保安全。

所有这一切都是在黑暗中刺伤,因为我不知道你的整个设置。但这是我最好的猜测。

祝你好运!

答案 2 :(得分:1)

主机标头(Request.Url获取域名的地方)用代理来自外部的流量的机器重写。

原始域登陆标题X-Forwarded-Host。你应该从那里阅读。

您还可以强制代理保留主机标头。如果你的代理是apache mod_proxy,你可以使用指令:

ProxyPreserveHost On

答案 3 :(得分:1)

我有同样的问题,我改用了这段代码:

"http://" + 
Request.ServerVariables["HTTP_HOST"] + 
Request.ServerVariables["URL"]

答案 4 :(得分:0)

我们遇到了类似的问题。在我们的例子中,它是 - 第一个命中网站的请求(在IISReset之后)。如果您点击此网址:http://appserver-01/default.aspx,那么它会继续使用它。

尝试以下方法: 1. IISReset 2.请求此网址:http://www.domainNmae.com/default.aspx 3.查看问题是否已解决

答案 5 :(得分:0)

您还可以查看解决网址或域名的无数其他方法。例如,Request.RawUrl通常会将输入的内容返回到地址栏等等。

答案 6 :(得分:0)

此次调用会返回什么值?

Request.ServerVariables("SERVER_NAME");
Request.ServerVariables("HTTP_HOST");