在ASP.NET MVC項目發布過程中,我們可以選擇IIS添加網站或在某個網站下添加應用程式兩種方式進行項目的部署發布。
但是我們在開發過程中,一些大型項目涉及多個子系統,並且集成單點統一登錄的話,如果我們添加多個網站,會使用到很多的埠,一旦遇到一些政務系統的話,由於信息安全等需求,並不能為我們開通那麼多可供外網訪問的Web埠,比較常用的埠是80或者8080等。
那在我們開發ASP.NET MVC項目時,一定要注意項目中圖片、跳轉的連結,一定要使用相對路徑,杜絕使用絕對路徑,否則會出現404無法找到文件錯誤。
作為.NET Web程序開發人員來說,絕對路徑就是在程序代碼中使用了../這樣的符號,相對路徑使用的~,代表當前應用程式的目錄。
接下來,我會舉幾個常見的使用了絕對路徑的錯誤寫法,並且給出相對應正確的相對路徑寫法:
案例1:在視圖頁面中使用了頁面地址跳轉的情形
絕對路徑寫法:
$("#mainFrm",parent.parent.document).attr("src", "../../GreenCar/GreenCar/GreenCarSumAdd?Year=" + year +"&MenuID=@ViewData["MenuID"]");
相對路徑寫法:
var url = "@Url.Action("GreenCarSumAdd ", "GreenCar", new { area = "GreenCar" })? Year =" + year +"&MenuID=@ViewData["MenuID"]";
$("#mainFrm",parent.parent.document).attr("src",url);
案例2:在視圖頁面中js中使用了圖片的情形
絕對路徑寫法:
$("#msgId").attr("src", "../../../Content/images/message1.png");
相對路徑寫法:
var url = "@Url.Content("~/Content/images/message1.png")";
$("#msgId").attr("src",url);
案例3:在視圖頁面中直接寫圖片地址的情形
絕對路徑寫法:
<img src="../../Content/images/logo.png"/>
相對路徑寫法:
<img src="@Url.Content("~/Content/images/ logo.png")"/>
那麼怎麼快速定位到使用相對路徑的文件呢?
我們打開Visual Studio開發環境,打開項目中任意一個視圖頁面,然後Ctrl+F在整個項目中查找全部的包含../的,如下圖所示:
找到所有的cshtml頁面,然後依次打開,逐個按照上面介紹的方法修改完畢即可。