我有一些在ASP.NET MVC Web應用程序中運行時沒有HttpContext的進程。該過程需要能夠確定用於讀取/寫入數據的應用程序的目錄目錄的物理路徑。但是,由於它沒有HttpContext,所以我不會使用像Server.MapPath等花哨的東西。建議?如何確定沒有HttpContext的文件的物理路徑?
回答
在網站上,最好是使用HttpRuntime.AppDomainAppPath
,因爲在執行路徑的某些時刻(即,當網站啓動時),沒有HttpContext.Current
可用。
另請參閱this post。
爲什麼HttpRuntime.AppDomainPath比AppDomain.BaseDirectory好?' – Matt 2010-08-23 16:46:44
由於它的語義。當你進入HttpRuntime時,最好是向運行時詢問正確的路徑,而不是自己動手。此外,它使您的代碼更具可讀性,您的意圖更清晰。最後,實現可能會改變,但即使在這種情況下,HttpRuntime仍然會返回正確的路徑,並且AppDomain不會(同樣可能適用於您已經啓動分離的AppDomain的罕見情況)。 – Abel 2010-08-23 16:51:17
謝謝。我編輯上面,因爲它實際上是AppDomainAppPath而不是AppDomainPath(至少在.NET4上) – Matt 2010-08-23 17:48:20
最好的辦法是使用AppDomain.BaseDirectory
屬性。只要你不擺弄自定義應用程序域,它就會指向你的根應用程序目錄。換一種說法;這兩個字符串是相同的:
string mapUsingAppDomain = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Contents");
string mapUsingServer = HttpContext.Current.Server.MapPath("~/Contents");
- 1. 如何確定DFS路徑的物理文件服務器?
- 2. 如何獲得知道exe文件路徑的物理路徑?
- 3. RewriteRule更改文件的物理路徑
- 4. 正確的IIS 7.5的物理路徑
- 5. 如何確保文件路徑有效?
- 6. 如何獲取文件的物理路徑?
- 7. 如何下載物理路徑中的空Excel文件
- 8. 我無法獲取選定文件的完整物理路徑
- 9. 如何將Android.Net.Uri路徑轉換爲xamarin中的物理路徑?
- 10. 如何獲取物理路徑的服務器路徑?
- 11. silverlight中的物理路徑
- 12. Beanstalk中的物理路徑
- 13. 我如何確定正確的文件系統路徑
- 14. SSIS物理路徑
- 15. 確定當前模塊的物理路徑
- 16. 用戶控件的物理路徑(asp.net)
- 17. 如何確定給定路徑是文件還是文件夾?
- 18. 我的設備上沒有物理存在的目錄路徑
- 19. tar文件沒有路徑
- 20. 確定數據庫的文件路徑
- 21. 確定文件的絕對路徑vb.net
- 22. Asp.net路由掩蓋路徑中的物理文件夾
- 23. 如何獲得沒有文件路徑的文件名?
- 24. 獲取任何數據庫的物理文件路徑
- 25. 如何在Asp.Net中設置物理路徑上傳文件?
- 26. Bentley ProjectWise Explorer - 如何獲取物理文件路徑(DMS)
- 27. 從給定文件路徑獲取有關物理設備的信息
- 28. 如何確定指定路徑上沒有圖像
- 29. 獲取選定文件的文件路徑沒有OpenFileDialog
- 30. 如何確定符號鏈接指向的文件的路徑?
即使'HttpContext.Current'可以爲空,「Server.MapPath」仍然可以工作。如果你不「擁有」它,也許你的意思是你錯過了對「System.Web」的引用? – Abel 2010-08-23 16:50:00
@Abel:由於「Server」是HttpContext.Current(也是HttpApplication的一個屬性)的屬性,因此您不會「引用」「服務器」來在例如靜態構造函數中使用.MapPath,既不其中的這些在靜態環境下將可靠地提供。 「服務器」的類型是「HttpServerUtility」,其構造函數是內部的,所以你不能使用它,除非你可以從Global.asax中的HttpContext.Current或HttpApplication中獲取它。因此,HttpRuntime.AppDomainAppPath是您應該使用的內容,正如您在下面的答案中發佈的那樣。 – Triynko 2013-08-01 00:54:57