Pages

2015-08-22

Web虛擬路徑轉換成實體路徑(MapPath)

要在Web環境將虛擬路徑(~/XXX/)轉換成實體磁碟Path, 一般都會使用下列4種函式作轉換:

  1. Page.MapPath()
  2. Server.MapPath()
  3. Request.MapPath()
  4. HttpContext.Current.Server.MapPath()

當把處理函式整理成Model類別時,為了減少傳入Page類別,就會使用第4種方式。然而若呼叫者(Caller)不是由Web頁面觸發的話,就會引起HttpContext.Current類別Null Reference錯誤。

因此在.NET 4.5以後版本,建議使用:

string phyPath = System.Web.Hosting.HostingEnvironment.MapPath(virPath);

這個方式即使在Global.asax中使用,也能正確解析虛擬相對路徑,是包裝Model Class中取得實體路徑較為建議的方式。

No comments: