Request.ServerVariables [“HTTP_HOST”]为空或空

时间:2014-04-09 16:50:34

标签: asp.net iis http-host server-variables

这是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或不确定还有什么。

2 个答案:

答案 0 :(得分:1)

我建议您尝试使用Application_AcquireRequestState而不是Application_BeginRequest。

所有会话&#34;功能&#34;在该事件中可用,并为每个请求运行。

<%@ Application Language="C#" %>
<script runat="server">
void Application_AcquireRequestState(object sender, EventArgs e)
{
   string host = GetHost(HttpContext.Current);
}
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>

答案 1 :(得分:1)

要获取主机名,请改用:

  

HttpContext.Current.Request.Url.Host