当我在服务器上部署我的应用程序时,我遇到了这个问题:
Request.Url.ToString();
返回计算机名称而不是域名。
例如:
而不是返回http://www.domainName.com/default.aspx
,而是返回http://appserver-01/default.aspx
。
注意: 部署前一切正常。
答案 0 :(得分:5)
听起来它可能是以下一种或多种:
您的服务器位于防火墙和/或负载均衡器后面,正在从请求中删除Host:
标头。
检查IIS配置 - 绑定列表应包括domainName.com
和www.domainName.com
,而不是空白(默认站点)。
您是在公司网络内部还是外部提出请求?网络管理员可能配置内部DNS的方式与外部DNS不同。
将此代码作为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] %> </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");