c# - HttpContext 在 global.asax.cs 中不起作用

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

我在 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/

相关文章:

C# 指针偏移 > 255 - ProcessMemoryReader

c# - 必填字段 Validator 是否需要 Validate 调用?

c# - 如何将按钮模板中的内容居中并将鼠标事件保持在空白区域

javascript - ActiveX 在 IE 11 中不工作

c# - 如何从 C# linq 查询中的表中选择最大日期

c# - 如何创建 FIFO/强信号量

c# - .NET:为什么 TryParseExact 在 Hmm 和 Hmmss 上失败?

c# - 推送新 View Controller 时有效地停止 Monotouch 中的 NSTimer

c# - 使用 TLS 1.2 从 HttpClient 连接到 Azure FrontDoor 后面的 API

c# - 在 Azure 上缓存 ASP.NET 页面