2015-04-30 94 views
0

我有一個使用表單身份驗證的ASP.Net MVC網站,其中loginUrl設置爲用於在web.config中進行身份驗證的Url。登錄過程調用登錄控制器,通過SSO進程進行重定向等,日誌進程正常工作,用戶可以登錄等。作爲登錄過程的一部分,我使用returnUrl將用戶發送到他們最初的頁面請求。如果沒有指定,則爲默認值。從ASP.Net中的控制器中的請求獲取#路由MVC

如果用戶在Url中鍵入另一個頁面,例如http://mysite/help,那麼returnUrl與預期的/幫助類似。但是,如果用戶輸入一個包含像http://mysite/#/test/123這樣的散列路徑的url,那麼returnUrl就是/。是否有可能從控制器中獲得#/ test/123的完整url?

要隔離這個問題,我創建了一個演示了此行爲簡單的ASP.Net MVC Web項目,正如你可以看到#路由丟失時,控制器稱爲:

這裏是web.config中:

web.config

這裏是在瀏覽器的請求:

enter image description here

這裏是測試應用程序的調試視圖,您可以在其中看到ReturnUrl只是/並且RawUrl只有查詢字符串。

enter image description here

這裏是小提琴手一樣的:

enter image description here

這裏是重定向到鉻登錄URL。正如你所看到的那樣,URL的#部分以某種方式保存在示例應用程序中,儘管它在控制器中的請求中不存在,並且我沒有在提琴手中看到它。

enter image description here

+0

@ErikFunkenbusch - 謝謝我懷疑這是發生了什麼事。我最終將我需要的#個參數傳遞給查詢字符串參數,然後在將用戶發送到頁面時添加了這些參數。 I.E?hashstate = test%2f/3。如果你寫這個答案我會接受這個解決方案。 – kmcnamee

回答

1

的「#」被稱爲片段和被認爲是「依賴客戶端」。換句話說,它是針對客戶端的,不會被髮送回服務器。所以,服務器不知道該片段可能要重定向到什麼。見

http://en.wikipedia.org/wiki/Fragment_identifier

從維基百科的文章:

片段取決於文檔的MIME類型和客戶端(瀏覽器)進行評估。在檢索文檔時,客戶端不應該向服務器發送URI片段,也不需要本地應用程序(請參見下文)的幫助(參見下文)不參與HTTP重定向[

相關問題