Първо, поставете кода, за да получите файловата директория на уебсайта, както следва:
След изпълнение на това изречение ще се появи изключение, което казва, че обектът е празен, както е показано на фигурата по-долу:
Защо получавам null?
Защото нишката, която изпълнява този код, не е текущата нишка, която обработва текущата заявка
Защо не е нулев, когато го вземеш другаде?
Това е така, защото ASP.NET програма вече е задала обекта HttpContext на свойството System.Runtime.Remoting.Messaging.CallContext.HostContext, споменато по-рано, преди да извика вашия код.
HttpApplication има вътрешен метод OnThreadEnter(), ASP. .NET извиква този метод, за да превключи HttpContext преди да извикне външен код, например когато се изпълнява обработващият обработчик на събития в конвейера или когато контекстът на синхронизация (AspNetSynchronizationContext) изпълнява обратно извикване. След смяна на свойството CallContext.HostContext на нишката, нашият код може да достъпи HttpContext референцията. Забележка: Препратката към HttpContext всъщност се запазва в обекта HttpApplication.
Как да получа абсолютния път на файла в този случай?
Можем да достъпим System.Web.HttpRuntime.AppDomainAppPath, за да получим основния път на програмата, и след това сплита относителните пътища на файла
|