[英]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.