1

这是 IIS 7.5 上的 ASP.NET 2.0 网站。下面是我的 global.asax。它有 BeginRequest 和一个静态方法。有人看到 Request.ServerVariables["HTTP_HOST"] 为空或为空有任何问题吗?

全球.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 或不确定还有什么有关。

4

2 回答 2

1

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

该事件的所有会话“功能”都可用,并且也针对每个请求运行。

<%@ 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>
于 2014-04-17T19:16:36.100 回答
1

要获取主机名称,请改用:

HttpContext.Current.Request.Url.Host

于 2014-04-18T04:01:34.413 回答