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