我有一個使用表單身份驗證的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中:
這裏是在瀏覽器的請求:
這裏是測試應用程序的調試視圖,您可以在其中看到ReturnUrl只是/並且RawUrl只有查詢字符串。
這裏是小提琴手一樣的:
這裏是重定向到鉻登錄URL。正如你所看到的那樣,URL的#部分以某種方式保存在示例應用程序中,儘管它在控制器中的請求中不存在,並且我沒有在提琴手中看到它。
@ErikFunkenbusch - 謝謝我懷疑這是發生了什麼事。我最終將我需要的#個參數傳遞給查詢字符串參數,然後在將用戶發送到頁面時添加了這些參數。 I.E?hashstate = test%2f/3。如果你寫這個答案我會接受這個解決方案。 – kmcnamee