从物理路径获取相对虚拟路径

44

如何在ASP.NET中从物理路径获取相对虚拟路径?反向方法如下:

Server.MapPath("Virtual Path Here");

但是上面方法的反方法是什么?


9
在IIS中,多个虚拟目录可能映射到同一个物理目录,即使在单个应用程序中也是如此。那么,该如何回答这个问题呢? - Damien_The_Unbeliever
4个回答

34

也许这个问题是你正在寻找的。 他们建议:

String RelativePath = AbsolutePath.Replace(Request.ServerVariables["APPL_PHYSICAL_PATH"], String.Empty);

27
    public static string MapPathReverse(string fullServerPath)
    {            
        return @"~\" + fullServerPath.Replace(HttpContext.Current.Request.PhysicalApplicationPath,String.Empty);
    }

这行代码是有效的,但在我的情况下,PhysicalApplicationPath以某种原因为小写,而fullServerPath中的路径并非如此,尽管它是从文件系统中读取的。由于Windows没有不区分大小写的路径,将所有内容转换为小写可能是可行的。 - Matthew Lock

14
Request.ServerVariables["APPL_PHYSICAL_PATH"]

是可以的,但并非总是如此。它只在有HTTP请求时才可用。

另一方面,调用

HostingEnvironment.ApplicationPhysicalPath

始终可用


11

您还可以像这样做:

string relativePath = absolutePath.Replace(HttpContext.Current.Server.MapPath("~/"), "~/").Replace(@"\", "/");

优点是您不需要HttpContext.Current.Request


这实际上是一个更好的答案,因为你不需要请求对象。 - Maxim Gershkovich

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接