簡體   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