2010-02-02 97 views
2

如果我嘗試訪問一個具有檢查身份驗證過濾器的網頁,那麼當我瀏覽匿名時,它會重定向到登錄頁面。因此,URL可能如下所示:我可以在GET請求上訪問querystring變量,但不能訪問POST

www.example.com/user/login?ReturnUrl=/user/settings 

我的登錄操作有兩種方法,分別是GET和POST請求類型。

[AcceptVerbs("GET") 
public ActionResult Login() 
{ 
} 
[AcceptVerbs("POST") 
public ActionResult Login(FormCollection f) 
{ 
} 

下面的代碼是GET和POST登錄操作:

string redirectUrl = ""; 

if(Request.QueryString["ReturnUrl"] != null) 
{ 
    redirectUrl = Request.QueryString["ReturnUrl"]; 
} 

在調試模式下,該變量被正確的GET動作初始化,但在POST操作它只是跳過該調用,這意味着它是NULL。

這是爲什麼? ReturnUrl在url中仍然可見?

+1

我無法重新創建此行爲。你的表單動作url *包含了返回url,對嗎? – 2010-02-02 20:05:12

+0

不,它沒有,表格發佈到/用戶/登錄 – Blankman 2010-02-02 20:14:16

+3

那麼這就是你的問題!你需要它發佈到完整的網址,包括查詢字符串,例如。 <形式行動=「/用戶/密碼RETURNURL = /用戶/設置?」方法=「郵報」> – 2010-02-02 20:16:59

回答

1

混合使用POST查詢字符串參數在技術上是RFC兼容,你應該做一個或另一個,但不能同時使用。 (說過我沒有遇到不允許的瀏覽器/網絡服務器)。

如果你想「正確地」做到這一點,你需要將ReturnUrl作爲表單上的隱藏輸入字段,並將其與服務器上的其他表單變量一起檢索。

+0

請問你能夠站點的RFC,據我所知,查詢只是進一步的數據傳遞給資源。 – 2010-02-05 15:30:42

0

在POST請求的情況下,檢查Request.Form["returnUrl"]財產

相關問題