我在我的開發機器(Windows 10 Pro)上安裝了 IIS Web 服務器。
我使用 VS 2017 開發了一個 .NET Web 應用程式。在 VS 中運行時效果很好。選單鏈接找到其正確的操作方法。它按預期執行。
我在 IIS 中遇到問題,我發布了 .NET (.NET framework 4.8) Web 應用程式。
發布到 IIS 在我的 C 驅動器上創建了檔案夾:inetpub\wwwroot\ProfileAndOrBlog。

我使用以下 URL 在瀏覽器中啟動 Web 應用程式:http://localhost/ProfileAndOrBlog。
然后我使用頂部選單項登錄到網路應用程式就好了。該選單鏈接在視圖中編碼為:
<li>@Html.ActionLink("Sign In", "SignIn", "SignIn", routeValues: null, htmlAttributes: new { id = "signinBtn", @class = "btn btn-primary my-signin-btn" })</li>
生成的 URL 為:http://localhost/ProfileAndOrBlog/SignIn/SignIn
登錄后,我得到這個頁面。
生成的 URL 為:http://localhost/ProfileAndOrBlog/User

我現在可以點擊任何側邊欄選單(應用程式的一項功能)——一個鏈接。
當我使用視圖中編碼為的側欄選單鏈接“提出建議”時:
<a href="/UserSuggestionMaint/Index"><i class="fa fa-edit fa-fw"></i> Make Suggestions</a>
我得到一個“找不到這個本地主機頁面”。

生成的 URL 是:http://localhost/UserSuggestionMaint/Index。
它沒有 ProfileAndOrBlog/ 作為路由的一部分。
注意:如果我手動添加到 URL 的路由的缺失部分,它可以作業。
http://localhost/ProfileAndOrBlog/UserSuggestionMaint/Index
那么,為什么缺少該路線部分?
uj5u.com熱心網友回復:
我不太明白你的問題,但似乎你的問題只是關于路線。
使用鏈接時
<li>@Html.ActionLink("Sign In", "SignIn", "SignIn", routeValues: null, htmlAttributes: new { id = "signinBtn", @class = "btn btn-primary my-signin-btn" })</li>
只是意味著它應該在按鈕上顯示“登錄”,鏈接將映射到如下所示:“/SignIn/SignIn”和“/UserSuggestionMaint/Index”
簡單來說,路由通常是 MVC 中的“/Controller/action”。
因此,請確保您參考了正確的操作方法,并且它會起作用。
使用“/UserSuggestionMaint/Index”意味著控制器應該類似于 UserSuggestionMaintController 和將呈現索引視圖的索引操作。
uj5u.com熱心網友回復:
關于在超鏈接中使用絕對路徑和相對路徑需要了解的一些資訊<a href>,
以 http:// 或 // 開頭。瀏覽器會將鏈接決議為絕對 URL。
以單個 / 開頭。瀏覽器會將鏈接決議為
相對于域。以文字開頭。瀏覽器會將鏈接決議為相對于頁面。
以。。。開始 #。瀏覽器將在同一頁面上(按 ID)查找 HTML 元素,
如果找到則滾動到該元素。
因此,當您使用時<a href="/UserSuggestionMaint/Index">,它會在 domian 而不是當前 url 之后添加此內容。
但是當你使用時@Html.ActionLink,它會根據一個錨元素回傳一個指定的鏈接文本。
在我的測驗中,我@Html.ActionLink在布局頁面中使用。當我將 MVC 應用程式設定為單獨的站點時,會@Html.ActionLink生成一個像這樣的超鏈接:

如果我將 MVC 應用程式設定為站點下的子應用程式,它就像這樣:

url 的一部分/ProfileAndOrBlog是必需的,這樣 IIS 才能知道您要訪問哪個應用程式。那么asp.net route就可以知道UserSuggestionMaint是controller,index是action。
解決方案是:
- 不使用超鏈接的相對 URL,而是使用絕對 URL。
<a href="http://domain name/ProfileAndOrBlog/UserSuggestionMaint/Index">. - 將 mvc 應用程式部署為單獨的站點,而不是默認網站下的子應用程式。
- 不使用而是
@Html.ActionLink動態生成超鏈接。
uj5u.com熱心網友回復:
感謝大家的洞察力。
為了不按照建議更改每個 href 以將波浪號添加到路徑的開頭,我改為更改了我的發布組態檔。我將“ProfileAndOrBlog”作為站點名稱(默認網站/ProfileAndOrBlog)和目標URL(http://localhost/ProfileAndOrBlog)的一部分。我在兩個地方都洗掉了它,它解決了 URL 問題。這是我的發布組態檔現在的樣子:

現在,當我使用以下 URL 在瀏覽器中啟動網站時,我可以成功訪問我的 Web 應用程式的所有功能:http://localhost
所以對于我的“提出建議”鏈接,URL 現在是:http://localhost/UserSuggestionMaint/Index。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/452692.html
標籤:asp.net-mvc iis
