繁体   English   中英

HttpContext在global.asax.cs中不起作用

[英]HttpContext does not work in global.asax.cs

我在global.asax.cs中有此代码

protected void Application_Start(object sender, EventArgs e)
{
    string logFile = HttpContext.Current.Request.PhysicalApplicationPath + "log4net.config";
}

它在.NET 4.0中工作正常,但在.NET 4.5中使用时引发以下异常。

在这种情况下请求不可用

答案很简单。 首先,这与.NET版本无关-而是与IIS版本和ASP.NET模式有关。 错误消息几乎说明了一切-您不能再在该位置使用HttpContext(实际上,它尚不存在)。

这主要与经典模式和集成模式(ASP.NET不再是ISAPI dll,而是以完全不同的级别集成到IIS)之间发生的更改有关。 如果我没记错的话,HttpContext现在仅在请求本身的持续时间内存在,以BeginRequest开始,以EndRequest等结束。

如果适用,您可以将应用程序文件夹切换到IIS中的经典应用程序池,但是我建议不要这样做,因为集成模式要凉爽得多。 仅将Classic用于无法升级的旧版应用程序。

另外,您不应该使用PhysicalApplicationPath。 这就是Server.MapPath的用途,对于Application_start而言, HostingEnvironment.MapPath

所以你会用

string logFile = HostingEnvironment.MapPath("~/log4net.config");

错误似乎很明显-在该事件中Request对象不可用。

尝试

HttpRuntime.AppDomainAppPath 

要么

Server.MapPath(".")

代替。

对于log4net,您还可以使用常规方法来设置配置位置,例如:

[程序集:log4net.Config.XmlConfigurator(ConfigFile =“ MyStandardLog4Net.config”,Watch = true)]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM