【问题标题】:HttpContext does not work in global.asax.csHttpContext 在 global.asax.cs 中不起作用
【发布时间】:2013-12-19 15:57:41
【问题描述】:

我在 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 中使用时会引发以下异常。

请求在此上下文中不可用

【问题讨论】:

  • 您的具体问题是什么?

标签: c# asp.net .net .net-4.0 .net-4.5


【解决方案1】:

答案很简单。首先,这与 .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");

【讨论】:

    【解决方案2】:

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

    试试

    HttpRuntime.AppDomainAppPath 
    

    Server.MapPath(".")
    

    改为。

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-07-28
        • 1970-01-01
        • 1970-01-01
        • 2012-02-06
        • 2017-12-28
        • 1970-01-01
        • 2012-12-18
        相关资源
        最近更新 更多