绝对path回到networking相对path

如果我已经设法使用Server.MapPath查找并validation文件的存在,我现在想直接将用户发送到该文件,那么将绝对path转换回相对path的最快方法是什么?

也许这可能工作:

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

(我使用C#,但可以适应VB)

(@ Tags2k:我编辑了上面的答案)

Server.RelativePath(path)不是很好吗?

好吧,你只需要扩展它;-)

 public static class ExtensionMethods { public static string RelativePath(this HttpServerUtility srv, string path, HttpRequest context) { return path.Replace(context.ServerVariables["APPL_PHYSICAL_PATH"], "~/").Replace(@"\", "/"); } } 

有了这个,你可以直接打电话

 Server.RelativePath(path, Request); 

我知道这是旧的,但我需要考虑虚拟目录(per @ Costo的评论)。 这似乎有助于:

 static string RelativeFromAbsolutePath(string path) { if(HttpContext.Current != null) { var request = HttpContext.Current.Request; var applicationPath = request.PhysicalApplicationPath; var virtualDir = request.ApplicationPath; virtualDir = virtualDir == "/" ? virtualDir : (virtualDir + "/"); return path.Replace(applicationPath, virtualDir).Replace(@"\", "/"); } throw new InvalidOperationException("We can only map an absolute back to a relative path if an HttpContext is available."); } 

我喜欢Canoas的想法。 不幸的是我没有“HttpContext.Current.Request”(BundleConfig.cs)。

我改变了这样的方法:

 public static string RelativePath(this HttpServerUtility srv, string path) { return path.Replace(HttpContext.Current.Server.MapPath("~/"), "~/").Replace(@"\", "/"); } 

如果你使用Server.MapPath,那么你应该已经有了相对的Webpath。 根据MSDN文档 ,这个方法需要一个variablespath ,它是Web服务器的虚拟path。 所以,如果你能够调用方法,你应该已经有相对的networkingpath可以立即访问。