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