我在 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中使用时抛出以下异常。
Request is not available in this context
最佳答案
答案很简单。首先,这与.NET版本无关——而是与IIS版本和ASP.NET模式有关。错误消息几乎说明了一切 - 您不能再在该位置使用 HttpContext (事实上,它还不存在)。
这主要与经典模式和集成模式之间发生的变化有关(其中 ASP.NET 不再是 ISAPI dll,而是在完全不同的级别上集成到 IIS 中)。如果我没记错的话,HttpContext 现在仅在请求本身的持续时间内存在,以 BeginRequest
开始,以 EndRequest
或类似内容结束。
如果适用,您可以将应用程序文件夹切换到 IIS 中的经典应用程序池,但我建议不要这样做,因为集成模式要酷得多。仅对无法升级的旧应用程序使用经典版。
此外,您不应该使用PhysicalApplicationPath。这就是 Server.MapPath
的用途,或者在 Application_start 的情况下,HostingEnvironment.MapPath
。
所以你会使用
string logFile = HostingEnvironment.MapPath("~/log4net.config");
关于c# - HttpContext 在 global.asax.cs 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20686131/