Как использовать Server.mappath, когда httpcontext .current - это ничто
-
12-10-2019 - |
Вопрос
У меня есть код, который работает нормально, когда мне нужно удалить некоторые файлы изображений из каталога на моем веб -сервере:
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) имеет ценность ничего.
Есть ли способ получить полный путь для этого случая?
Решение
Предполагая, что пути являются относительными, то отдельный процесс не знает, чем они относится относительно, какое веб -приложение. В этом случае вам нужно будет хранить его в конфигурации и либо добавить их вместе, либо выполнить замену строки на ~/
Другие советы
А HttpContext.Current
недоступен, когда ваш код работает внутри потока.
Чтобы иметь свой путь веб -приложения, вы можете использовать:
System.Web.Hosting.HostingEnvironment.MapPath("~/")
или вы можете просто найти его в HttpRuntime.AppDomainAppPath
собственность (рекомендуется/быстрее).