Come usare Server.MapPath quando HttpContext .Current is Nothing
-
12-10-2019 - |
Domanda
Ho qualche codice che funziona bene quando ho bisogno di eliminare alcuni file di immagini da una directory sul mio server web:
Dim ImageURL As String = dsImages.Tables(0).Rows(iImgRow).Item("ImageURL")
Dim physicalName = Server.MapPath(ImageURL)
oUpload.DeleteFileFromServer(physicalName, iAdid, iImgID)
.. ma io sono in esecuzione in un problema quando un intervento di manutenzione in esecuzione in un thread separato a intervalli prestabiliti determina che i file, come la necessità di cui sopra da eliminare:
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)
In quest'ultimo caso, HttpContext.Current.Server.MapPath (ImageURL) ha un valore di nulla.
C'è un modo per ottenere il percorso completo per questo caso?
Soluzione
Supponendo che i percorsi sono relativi allora il processo separato non sanno quello che sono relative al, quale applicazione web. In questo caso è necessario memorizzarlo nella config e sia accodare i due insieme o eseguire una stringa sostituire il ~ /
Altri suggerimenti
Il HttpContext.Current
non è disponibile quando il codice viene eseguito all'interno di un thread.
Per avere il vostro percorso di applicazione web è possibile utilizzare:
System.Web.Hosting.HostingEnvironment.MapPath("~/")
oppure si può semplicemente trovare nella HttpRuntime.AppDomainAppPath
immobili (consigliato / più veloce).