| 方法 | 程式碼 | 回傳值範例 | 適用情境 |
|---|---|---|---|
| 1. Request.PhysicalPath 取目錄 | Path.GetDirectoryName(Request.PhysicalPath) | D:\Web\App\Folder\ | **.aspx/.ascx 程式碼後置**,最直觀 |
| 2. HttpContext.Current.Request.MapPath | HttpContext.Current.Request.MapPath("~/") | D:\Web\App\ | **非頁面類別** (HttpModule、Service、Helper) 無 Page 實例時 | 3. Server.MapPath | Server.MapPath("/") | D:\Web\App\ | 頁面類別中簡寫,等同方法 1 的網站根目錄版 |
HttpContext.Current.Request.MapPath("~/") 可在**任何有 HttpContext 的執行緒**運作,不綁定 Page 生命週期,單元測試時也易模擬。
// bin 目錄
string binPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "bin");
// App_Data
string appData = HttpContext.Current.Server.MapPath("~/App_Data/");
// 任意虛擬路徑
string uploads = HttpContext.Current.Server.MapPath("~/Uploads/Images/");
~/ 開頭代表應用程式根目錄,`/` 代表網站根目錄(若為虛擬目錄部署則不同)。