Wie Server.MapPath zu verwenden, wenn Httpcontext .Current Nichts ist
-
12-10-2019 - |
Frage
Ich habe einig Code, funktioniert gut, wenn ich brauche einige Bilddateien aus einem Verzeichnis auf meinem Web-Server löschen:
Dim ImageURL As String = dsImages.Tables(0).Rows(iImgRow).Item("ImageURL")
Dim physicalName = Server.MapPath(ImageURL)
oUpload.DeleteFileFromServer(physicalName, iAdid, iImgID)
.. aber ich laufe in ein Problem, wenn eine Wartungsaufgabe in festgelegten Intervallen in einem separaten Thread ausgeführt wird, die Dateien wie die oben Notwendigkeit bestimmt, gelöscht werden:
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 diesem letzteren Fall HttpContext.Current.Server.MapPath (ImageURL) hat einen Wert von Nichts.
Gibt es eine Möglichkeit den vollständigen Pfad für diesen Fall zu bekommen?
Lösung
Unter der Annahme, dass die Pfade relativ sind dann der separate Prozess nicht weiß, was sie bezüglich zu, die Web-Anwendung. In diesem Fall müssen Sie es in der Config speichern und entweder hängen Sie die beide zusammen oder eine Zeichenfolge durchführen ersetzen auf ~ /
Andere Tipps
Das HttpContext.Current
ist nicht verfügbar, wenn der Code in einem Thread ausgeführt wird.
Um Ihre Web-Anwendung Pfad haben können Sie entweder:
System.Web.Hosting.HostingEnvironment.MapPath("~/")
oder Sie können es einfach finden, in den HttpRuntime.AppDomainAppPath
Immobilien (empfohlen / schneller).