Як я можу використовувати Server.MapPath () від global.asax?


122

Мені потрібно використовувати Server.MapPath()для об'єднання деяких файлів шлях, який я зберігаю в web.config.

Однак, оскільки Server.MapPath()спирається на поточний HttpContext (я думаю), я не в змозі цього зробити. При спробі використання методу, незважаючи на те, що він "доступний", я отримую таке виняток:

Операція з сервером недоступна в цьому контексті.

Чи існує інший метод, який може зіставити відповідний каталог веб-кореневих файлів, наприклад ~/App_Data/повний фізичний шлях, наприклад C:\inetpub\wwwroot\project\App_data\?

Відповіді:


295

Ви можете спробувати System.Web.Hosting.HostingEnvironment.MapPath () .

Не потрібен HttpContext.


Будь-які застереження до цієї техніки?
Іван Бубріскі

10
Ні. Якщо ви запустили Reflector, ви помітите, що Server.MapPath і Request.MapPath в кінцевому підсумку викликають VirtualPath.MapPath, який в кінцевому підсумку викликає HostingEnvironment.MapPath. Всі вони закінчуються там же. HostingEnvironment.MapPath вирізає середнього чоловіка.
Корбін березня

1
+1 це зафіксований проект з відкритим кодом, який працював на мене, а потім просто припинив ініціалізувати через HttpContext.Current.Server, який з'явився для нього, не маючи контексту з якоїсь причини. Переключившись на це, поверніть його до плавного плавання.
Кріс Марісіч


1

Перебуваючи в Global.asax, використовуйте контекстний об'єкт:

context.Server.mappath ()

Контекст дозволяє отримати доступ також до колекції сеансу, об'єкта запиту, об'єкта відповіді. Дуже корисно, наприклад, якщо ви хочете ввести помилки, наприклад


У ContextGlobal.asax немає гарантій .
Андерс Торнблад

-3

Ви можете спробувати HttpContext.Current.Server.MapPath ("/") - Ось як я посилався на це на заняттях.


2
Ви можете посилатися на це так, як у класах, які насправді мають HttpContext, але я не думаю, що у global.asax є такий, отже, я отримав повідомлення про помилку.
Іван Бубріскі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.