如果我設法使用Server.MapPath來查找和驗證文件的存在,我現在想直接將用戶發送到該文件,那麼什麼是最快的轉換方式那絕對路徑回到一個相對的網絡路徑?回到網絡相對路徑的絕對路徑
回答
也許這可能工作:
String RelativePath = AbsolutePath.Replace(Request.ServerVariables["APPL_PHYSICAL_PATH"], String.Empty);
(我使用C#,但可以調整到VB)
(@ Tags2k:我editted上面的回答)
如果您使用了Server.MapPath,那麼您應該已經擁有了相對的Web路徑。根據MSDN documentation,此方法採用一個變量,路徑,它是Web服務器的虛擬路徑。所以如果你能夠調用這個方法,你應該已經可以立即訪問相關的web路徑。
這不一定是正確的 - MapPath調用可能已經由另一個方法執行,並從我的文件檢查器方法傳入/調用,或者(在我的情況下)由許多不同元素構建,其中之一是我的資源目錄(定義爲「〜/ __ Resources」)。很明顯,將用戶引導至此路徑將導致意想不到的結果。這也是有用的知道,因爲有時絕對文件路徑可能已經從數據庫中拉出,沒有其他上下文信息。 – tags2k 2008-08-06 09:00:42
[@tagsk](http://stackoverflow.com/questions/3164#3195) - 我不知道。通過定義方法,如果輸入到Server.MapPath中的字符串是有效的並返回物理服務器路徑,那麼無論您如何生成它,它都必須是有效的虛擬路徑。有關在虛擬地址開頭處使用波形符號(〜)的信息,請參閱此MSDN文章[ASP.NET Web站點路徑](http://msdn.microsoft.com/zh-cn/library/ms178116.aspx) :> ASP.NET包含Web應用程序>根操作符(〜),您可以在服務器中指定路徑時使用 > 012ak> c – 2008-08-06 09:30:10
Yaakov - 並非如此。例如,我使用的函數獲取根路徑並遞歸返回一個`IEnumerable
有Server.RelativePath(路徑)不是很好嗎?
好了,你只需要擴展它;-)
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);
我知道這是舊的,但我需要考慮虛擬目錄(每@ 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(@"\", "/");
}
- 1. 網絡路徑使絕對路徑 - asp.net
- 2. 相對網絡路徑VS絕對路徑
- 3. 相對路徑到網頁鏈接絕對路徑的映射
- 4. 相對路徑或絕對路徑
- 5. 絕對路徑和相對路徑
- 6. 改變相對路徑絕對路徑
- 7. Node.js:相對路徑和絕對路徑
- 8. 更改相對路徑和絕對路徑的基本路徑
- 9. 檢測路徑是絕對路徑還是相對路徑
- 10. 檢查路徑是絕對路徑還是相對路徑
- 11. 絕對與相對路徑
- 12. 相對和絕對路徑
- 13. 相對v絕對路徑?
- 14. 用絕對路徑URL替換相對路徑網址
- 15. 輸入絕對路徑,在PHP返回相對路徑
- 16. 網絡根的絕對路徑
- 17. 網絡應用中的絕對路徑
- 18. 的Python:絕對路徑相對讓到另一條路徑
- 19. 絕對路徑到相對路徑的轉換
- 20. 從python的相對路徑中找到絕對路徑
- 21. Spring MVC絕對路徑到相對路徑
- 22. 改變絕對路徑到相對路徑
- 23. 絕對路徑與磁盤名稱(C:\\)到相對路徑(〜/)
- 24. 使用絕對路徑或相對路徑陣營路線
- 25. 絕對路徑
- 26. 絕對路徑
- 27. 在makefile中,如何獲取從一個絕對路徑到另一個絕對路徑的相對路徑?
- 28. python中的絕對路徑和相對路徑問題
- 29. 結合的絕對路徑使用相對路徑
- 30. PHP的require_once絕對路徑與相對路徑(不工作)
這個問題是兩歲,要發表評論,不存在當年的能力。 「天啊」。 – tags2k 2010-12-30 18:14:50