当HTTPContext .Current为Nothing时,如何使用Server.MapPath

Joh*_*ams 16 vb.net asp.net server.mappath httpcontext

当我需要从Web服务器上的目录中删除一些图像文件时,我有一些代码可以正常工作:

Dim ImageURL As String = dsImages.Tables(0).Rows(iImgRow).Item("ImageURL")
Dim physicalName = Server.MapPath(ImageURL)
oUpload.DeleteFileFromServer(physicalName, iAdid, iImgID)
Run Code Online (Sandbox Code Playgroud)

..但是当以设定的时间间隔在单独的线程中运行的维护任务确定需要删除上述文件时,我遇到了问题:

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)
Run Code Online (Sandbox Code Playgroud)

在后一种情况下,HttpContext.Current.Server.MapPath(ImageURL)的值为Nothing.

有没有办法获得这种情况的完整路径?

Cht*_*lek 28

HttpContext.Current当代码在线程内运行时,它不可用.

要获得Web应用程序路径,您可以使用:

System.Web.Hosting.HostingEnvironment.MapPath("~/")
Run Code Online (Sandbox Code Playgroud)

或者您可以在HttpRuntime.AppDomainAppPath物业中找到它(推荐/更快).

  • 为什么推荐`HttpRuntime.AppDomainAppPath` /更快?它是否更快"编写更少的代码"?或者运行语句时速度更快?它的差异是否足以击败不必自己连接路径的便利性? (3认同)

Haw*_*xby 2

假设路径是相对的,那么单独的进程不知道它们相对于哪个 Web 应用程序。在这种情况下,您需要将其存储在配置中,并将两者附加在一起或在 ~/ 上执行字符串替换

  • 在以下位置找到了更好的答案:http://stackoverflow.com/questions/935940/how-can-i-use-server-mappath-from-global-asax - 但我不知道结束这个问题的最佳方法。 (8认同)