亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

解除.NET中虛擬路徑的疑惑

發布時間:2020-07-19 21:19:19 來源:網絡 閱讀:301 作者:hamu01 欄目:編程語言

今天部署產品時,發現一個涉及到路徑錯誤的bug,在開發環境下都OK,但是到了測試環境中卻一直報錯,經過一番排查,原來錯誤出在了HttpContext.Current.Server.MapPath這個方法上,之前就一直對這個方法怎樣將虛擬路徑轉化為物理路徑不甚了了,今天我忍無可忍,在網上仔細查找了資料,還親自做了實驗,終于弄明白了。在此分享出來,希望能幫助到同樣有困惑的人,少走彎路。

虛擬路徑中的那些特殊字符的含義

  • Server.MapPath(".")返回當前執行文件所在路徑
  • Server.MapPath("..")返回當前執行文件所在路徑的父路徑
  • Server.MapPath("~") 返回應用程序的所在路徑
  • Server.MapPath("/"),Server.MapPath("\\"),Server.MapPath(@"\") 返回網站所在路徑
  • Server.MapPath("")Server.MapPath(null) 返回文件所在路徑,和Server.MapPath(".")是一樣的

眾所周知我們在URL中的路徑都是虛擬路徑,最后都要被轉化為網站所在服務器的物理路徑,一般的路徑都很好理解,對大家造成困擾的多是包含這些特殊字符的路徑,他們在虛擬路徑到物理路徑的轉化過程中有著特殊的含義。

 

舉例說明

先在IIS中創建一個網站,網站域名為www.test.com,修改hosts文件將這個域名指向本機,網站目錄為C:\inetpub\wwwroot\Test。在這個網站下添加應用程序Shop,目錄為D:\Shop。在這個網站和應用程序中同時添加一個目錄,取名main。

解除.NET中虛擬路徑的疑惑

創建一個WebForm,這個WebForm輸出上述所有特殊字符在運行時對應的路徑,代碼如下:

<% Output(".", "點號"); Output("..", "雙點號"); Output("~","波浪號"); Output("/","正斜杠"); Output("\\", "反斜杠"); Output(@"\","反斜杠"); Output(null,"null"); Output(string.Empty, "string.Empty");

Output(@"\main", @"\main"); %> <script runat="server"> private void Output(string token, string tokenDisplayName) { try { string path = tokenDisplayName + " : " + HttpContext.Current.Server.MapPath(token); Response.Write(path + "<br/>"); } catch (Exception) { Response.Write(tokenDisplayName + " : 非法路徑" + "<br/>"); } } </script>

 

我們把這個頁面分別放到網站和應用程序的根目錄以及main目錄下,然后訪問每個頁面,輸出如下:

解除.NET中虛擬路徑的疑惑 解除.NET中虛擬路徑的疑惑 解除.NET中虛擬路徑的疑惑 解除.NET中虛擬路徑的疑惑

結論

從上面的頁面輸出可以很好的驗證文章開始處的說明,這里需要特別說明的幾點是:

  • 在網站根目錄下,訪問Server.MapPath("..")會拋出異常,這說明網站中的所有訪問不能超出網站所在的目錄范圍,這樣的設計合情合理
  • 在URI中訪問的路徑都是虛擬路徑,而不是物理路徑,Shop這個應用程序的上一級目錄不是其物理環境中的上一級目錄,而是在IIS中其上級所在的目錄,也就是網站所在的目錄,因此在Shop這個應用程序中訪問Server.MapPath("..")返回的C:\inetpub\wwwroot\Test
  • 不管是正斜杠還是反斜杠映射的都是網站根目錄,之所以強調這一點是因為在網上查看資料的時候,見到如下的說法:在Shop應用程序的根目錄下訪問Server.MapPath(@"\main")返回的是D:\Shop\main目錄,這個說法是絕對不正確的,特此提醒
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

海兴县| 临西县| 新龙县| 华宁县| 清涧县| 义乌市| 灵寿县| 荣昌县| 宜春市| 基隆市| 鹤山市| 定州市| 平阳县| 永善县| 青海省| 广昌县| 宁乡县| 甘洛县| 海原县| 印江| 牙克石市| 福鼎市| 乌兰察布市| 德惠市| 铜陵市| 珲春市| 即墨市| 盱眙县| 尉犁县| 绥宁县| 五台县| 城步| 荆门市| 鄂尔多斯市| 建平县| 财经| 博罗县| 手游| 河南省| 阳原县| 广南县|