Как использовать Server.MapPath, когда HTTPContext .Current - это ничто - PullRequest
15 голосов
/ 20 января 2011

У меня есть код, который отлично работает, когда мне нужно удалить некоторые файлы изображений из каталога на моем веб-сервере:

Dim ImageURL As String = dsImages.Tables(0).Rows(iImgRow).Item("ImageURL")
Dim physicalName = Server.MapPath(ImageURL)
oUpload.DeleteFileFromServer(physicalName, iAdid, iImgID)

.. но я сталкиваюсь с проблемой, когда задача обслуживания, выполняемая в отдельном потоке с установленными интервалами, определяет, что файлы, подобные приведенным выше, необходимо удалить:

Dim ImageURL As String = dsImage.Tables(0).Rows(i - 1).Item("ImageURL")
Dim iImgID As Integer = dsImage.Tables(0).Rows(i - 1).Item("ImageId")
Dim physicalName As String = HttpContext.Current.Server.MapPath(ImageURL)
oUpload.DeleteFileFromServer(physicalName, iAdID, iImgID)

В этом последнем случае HttpContext.Current.Server.MapPath (ImageURL) имеет значение Nothing.

Есть ли способ получить полный путь для этого случая?

Ответы [ 2 ]

26 голосов
/ 18 ноября 2015

HttpContext.Current недоступно, когда ваш код выполняется внутри потока.

Чтобы указать путь к веб-приложению, вы можете использовать:

System.Web.Hosting.HostingEnvironment.MapPath("~/")

или вы можете просто найти его в свойстве HttpRuntime.AppDomainAppPath (рекомендуется / быстрее).

1 голос
/ 20 января 2011

Если предположить, что пути являются относительными, то отдельный процесс не знает, к чему они относятся, к какому веб-приложению.В этом случае вам необходимо сохранить его в конфигурации и либо добавить их вместе, либо выполнить замену строки в ~ /

...