我正在爲公司Intranet站點開發MVC 3應用程序,並且我有一些URL助手有時會產生錯誤的URL。應用程序正在通過由我們的IT部門控制的訪問管理器應用程序訪問,該應用程序基本上提供了一個標準化的URL,以便用戶不需要知道有關服務器的任何信息。例如,直接訪問服務器上的應用程序,我將訪問:MVC 3 Url Helper給出不正確的URL
http://philsserver/App
通過訪問管理器,我將使用由IT部門提供的網址:
http://secureintranet/PHILSAPP/App/
我現在用的是MVC URL助手在我的應用程序中的幾個地方 - 問題是有時候「PHILSAPP」部分被忽略 - 當我在「<a>
」鏈接中使用它時,它可以工作,但是當我在別處使用它時,它不會。
例如,代碼:
<a href="@Url.Action("Index", "FormsAndTemplates")">
正確地創建鏈接爲:
<a href="/PHILSAPP/App/FormsAndTemplates">
。
下面的代碼:
@Html.TextBox("lastName", ViewBag.LastName as string, new { @class = "input-mini", @autocomplete = Url.Action("QuickSearch", "Employee") })
生產:
<input autocomplete="/App/Employee/QuickSearch" class="input-mini" id="lastName" name="lastName" type="text" value="" />
注意這個URL不會包含 「PHILSAPP」 的一部分。如果我在JavaScript中使用URL助手,或者在「<a>
」標籤以外的任何地方使用URL助手,也會發生這種情況。有誰知道爲什麼會發生這種情況?據我所知,這兩個Url.Action調用幾乎相同,所以我不明白爲什麼會發生這種情況。如果這個問題已經得到解答,我很抱歉,但我無法找到任何有關類似問題的人的任何信息。預先感謝您的幫助。
更新: 按照要求,我的路線是如下:
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional });
更新2:使用Access Manager的Tivoli Identity Manager的如果,讓任何人的任何線索。
你能張貼你的路線嗎? – Xharze
我不熟悉Tivoli Identity Manager,但通常反向代理通常會在生成的HTML發送到客戶端瀏覽器之前進行更改。 HTML的這種交替可以影響urls,css以及java腳本。所以我的猜測是:Url.Action總是生成正確的url。但是在'href'裏面,你的反向代理修改它。但它不能正確檢測'autocomplete'屬性中的url,並保持不變。所以我應該建議與您的IT部門聯繫,告知您的反向代理配置。 – nemesv
@nemesv - 你100%正確,我不知道爲什麼我沒有發生。我仍然不確定我的解決方案是什麼,但你肯定幫助我理解了這個問題。我通過將我的一個更改爲(注意額外的'f')來檢查這一點 - 確定地,URL沒有正確生成。更糟糕的是,如果手動將「/ PHILSAPP」添加到URL中,Identity Manager將無法識別它並再次添加它。無論如何,我將繼續調查可能的解決方案,但非常感謝您的幫助。 – Phil