绝对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可以立即访问。