Как использовать Server.MapPath, когда HTTPContext.Current is Nothing

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

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.

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

Ответы

Ответ 1

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

Ответ 2

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

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

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

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