【发布时间】:2014-05-23 00:54:00
【问题描述】:
这是一个基于 IIS 7.5 的 ASP.NET 2.0 网站。下面是我的 global.asax。它有 BeginRequest 和一个静态方法。 有人看到 Request.ServerVariables["HTTP_HOST"] 为空或为空有什么问题吗?
Global.asax:
<%@ Application Language="C#" %>
<script runat="server">
void Application_BeginRequest(object sender, EventArgs e)
{
string host = GetHost(HttpContext.Current); //this is returning null;
}
public static string GetHost(HttpContext context)
{
if (context == null) return null;
string httpHost = context.Request.ServerVariables["HTTP_HOST"];
if (string.IsNullOrEmpty(httpHost)) return null;
string hostName = httpHost.Split(new char[] { ':' })[0];
return hostName;
}
</script>
这在 IIS 6 的本地机器和测试服务器上运行良好,但在 IIS 7.5 的生产服务器上运行良好。
添加调试信息,发现返回 null 的是 string.IsNullOrEmpty(httpHost) 语句。 当我查看 Firebug 时,我看到请求标头显示主机已按预期设置。
有什么想法吗?
注意:我将直接在 BeginRequest 中移动 GetHost 中的代码,但现在只是寻找对当前行为的一些解释
更新:我尝试通过页面上的 Page_Load 访问它,我得到了正确的值。所以它可能与 Global.asax 或不确定还有什么有关。
【问题讨论】:
-
不是 HttpContext.Current,base.Context 返回什么不同的东西吗?
-
@Josh 我可能会在星期一尝试,但我想知道为什么这对 HTTP_HOST 很重要?
-
在这里您可以找到有关您的问题的更多信息:Request.ServerVariables
-
@Cerveser 我在 Begin_Request 中使用它,它在 Request 对象上没有出错,但它是 Host ServerVariable 为空。
-
您是否在 .NET 2.0 经典模式下的 IIS7 中运行它?也许您应该在应用程序池中将启用 32 位应用程序设置为 true。
标签: asp.net iis http-host server-variables