我有一些在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. 如何確保文件路徑有效?
- 5. 如何下載物理路徑中的空Excel文件
- 6. 我無法獲取選定文件的完整物理路徑
- 7. 如何將Android.Net.Uri路徑轉換爲xamarin中的物理路徑?
- 8. Beanstalk中的物理路徑
- 9. silverlight中的物理路徑
- 10. 我如何確定正確的文件系統路徑
- 11. 用戶控件的物理路徑(asp.net)
- 12. 如何確定給定路徑是文件還是文件夾?
- 13. 我的設備上沒有物理存在的目錄路徑
- 14. 確定文件的絕對路徑vb.net
- 15. 確定數據庫的文件路徑
- 16. Asp.net路由掩蓋路徑中的物理文件夾
- 17. 如何獲得沒有文件路徑的文件名?
- 18. 獲取任何數據庫的物理文件路徑
- 19. Bentley ProjectWise Explorer - 如何獲取物理文件路徑(DMS)
- 20. 從給定文件路徑獲取有關物理設備的信息
- 21. 如何確定指定路徑上沒有圖像
- 22. 獲取選定文件的文件路徑沒有OpenFileDialog
- 23. 如何確定 - [UIImage imageNamed:]將加載的文件的路徑?
- 24. 如何確定符號鏈接指向的文件的路徑?
- 25. C++:如何在該文件的路徑與給定的路徑
- 26. 沒有文檔的路徑
- 27. 如何指定flowconfig文件的路徑?
- 28. C#:如何獲得Process.Start在給定文件時沒有路徑時將使用的可執行文件路徑?
- 29. 如何將物理路徑轉換爲虛擬路徑在C#
- 30. Javac無法找到.class文件,沒有正確的類路徑
即使'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