您好,登錄后才能下訂單哦!
今天部署產品時,發現一個涉及到路徑錯誤的bug,在開發環境下都OK,但是到了測試環境中卻一直報錯,經過一番排查,原來錯誤出在了HttpContext.Current.Server.MapPath這個方法上,之前就一直對這個方法怎樣將虛擬路徑轉化為物理路徑不甚了了,今天我忍無可忍,在網上仔細查找了資料,還親自做了實驗,終于弄明白了。在此分享出來,希望能幫助到同樣有困惑的人,少走彎路。
眾所周知我們在URL中的路徑都是虛擬路徑,最后都要被轉化為網站所在服務器的物理路徑,一般的路徑都很好理解,對大家造成困擾的多是包含這些特殊字符的路徑,他們在虛擬路徑到物理路徑的轉化過程中有著特殊的含義。
先在IIS中創建一個網站,網站域名為www.test.com,修改hosts文件將這個域名指向本機,網站目錄為C:\inetpub\wwwroot\Test。在這個網站下添加應用程序Shop,目錄為D:\Shop。在這個網站和應用程序中同時添加一個目錄,取名main。
創建一個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目錄下,然后訪問每個頁面,輸出如下:
從上面的頁面輸出可以很好的驗證文章開始處的說明,這里需要特別說明的幾點是:
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。