Спочатку вставте код, щоб отримати файл каталогу сайту, наступним чином:
Після виконання цього речення буде додано виключення, яке повідомляє, що об'єкт порожній, як показано на рисунку нижче:
Чому я отримую 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, щоб отримати кореневий шлях програми, а потім з'єднують відносні шляхи файлу
|