Comment utiliser Server.MapPath quand HttpContext .Current is Nothing
-
12-10-2019 - |
Question
J'ai un code qui fonctionne très bien quand je dois supprimer des fichiers d'image à partir d'un répertoire sur mon serveur web:
Dim ImageURL As String = dsImages.Tables(0).Rows(iImgRow).Item("ImageURL")
Dim physicalName = Server.MapPath(ImageURL)
oUpload.DeleteFileFromServer(physicalName, iAdid, iImgID)
.. mais je suis en cours d'exécution dans un problème quand une tâche de maintenance en cours d'exécution dans un thread séparé à intervalles détermine que les fichiers comme la nécessité ci-dessus à supprimer:
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)
Dans ce dernier cas, HttpContext.Current.Server.MapPath (ImageURL) a une valeur de rien.
Y at-il un moyen d'obtenir le chemin complet pour ce cas?
La solution
Si l'on suppose que les chemins sont relatifs alors le processus distinct ne sait pas ce qu'ils sont liés à, quelle application web. Dans ce cas, vous aurez besoin de le stocker dans la configuration et soit ajouter les deux ensemble ou effectuer une chaîne de remplacement sur ~ /
Autres conseils
n'est pas disponible HttpContext.Current
lorsque votre code est en cours d'exécution dans un thread.
Pour que votre chemin de l'application Web que vous pouvez soit utiliser:
System.Web.Hosting.HostingEnvironment.MapPath("~/")
ou vous pouvez simplement le trouver dans le HttpRuntime.AppDomainAppPath
propriété (recommandé / plus rapide).